PDA

Ver la Versión Completa : Quitar variable de memoria


istradlin
02-05-2005, 15:01:53
Tengo una aplicacion y en determinado momento necesito una variable
cadenaSQL:string; que uso para construir y guardar una consulta SQL, luego ese string se lo meto a un datset y ya no o vuelvo a necesitar en principio, ¿como hago para quitar el string de momoria? puede ser dispose o algo asi? cual es la sintaxis.


un saludo.

delphi.com.ar
02-05-2005, 15:37:33
Puedes quitar el contenido del string, pero hasta donde yo se, no puedes quitar "amablemente" el puntero de esta variable, este vivirá dentro de su scope.


sVariable := '';


Saludos!

istradlin
02-05-2005, 17:08:41
ok, a lo largo de la aplicacion tendre cuatro o cinco strings de esa forma, no ocupan mucho en memoria no?, o me sera mejor poner una unica. Es decir podria poner esa string en un modulo de datos que estoy usando para la base de datos y usarla cuando necesite?

delphi.com.ar
02-05-2005, 17:50:38
Creo que la ayuda es mas que clara:
A string represents a sequence of characters. Delphi supports the following predefined string types.

String types
Type Maximum length Memory required Used for
ShortString 255 characters 2 to 256 bytes backward compatibility
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters, DBCS ANSI, MBCS ANSI, etc.
WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multi-user servers and multi-language applications
AnsiString, sometimes called the long string, is the preferred type for most purposes.
String types can be mixed in assignments and expressions; the compiler automatically performs required conversions. But strings passed by reference to a function or procedure (as var and out parameters) must be of the appropriate type. Strings can be explicitly cast to a different string type (see Typecasts).
The reserved word string functions like a generic type identifier. For example,

var S: string;

creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H-} directive to turn string into ShortString.
...

Neftali [Germán.Estévez]
02-05-2005, 18:05:40
...ok, a lo largo de la aplicacion tendre cuatro o cinco strings de esa forma, no ocupan mucho en memoria no?, o me sera mejor poner una unica...
Es mejor que definas las variables de forma privada donde las necesites.
Creo que definir una variable Global (para no definir 4 o 5 en otros lugares) para evitar espacio es un error. Dada la memoria que puede ocupar un programa hoy en día, el espacio de memoria de 5 variables de tipo String en comparación es ínfimo.
Además las variables privadas (por ejemplo definidas dentro de una función) se destruyen cuando se termina la llamada a esa función, por lo tanto, al final seguramente acabarás ahorrando memoria.

mamcx
02-05-2005, 18:34:44
Ten en cuenta que Delphi maneja MUY eficientemente los strings. Creo que debes venir de programar en C++ donde es una patada en el higado y tiene mas sentido la pregunta... pues la verdad los strings en Delphi dan sopa y seco a todos los demas.

Delphi automaticamente administra la memoria de los strings, reclamando y liberando de forma dinamica. Lo que debes hacer es usar Var: String sin definirle un tamaño (para que no sea un ShortString) y todo listo.

Las variables que se definen dentro de las funciones/metodos tienen un manejo mas optimo que las globales. Ademas una cadena de Sql? eso es pan comido... No hay manera que por ese uso te quedes sin memoria. Ademas, es buena practica de desarrollo no usar variables globales mientras existan otras alternativas.

Asi que para resumir: No consumen mucha memoria y Delphi la libera perfectamente.

istradlin
02-05-2005, 19:15:38
ok, muchas gracias a todos, me habeis ayudado, declarare entonces variables locales pq van a estar en la funcion click que llama a un formulario que construye una sql a partir de las selecciones que haga el usuario de manera grafica y luego guardo esa sql en la string para asignarla a un data set


gracias a todos, un saludo