Pregunta

Tengo una aplicación delphi grande y estoy tratando de mantener bajo el consumo de memoria.

En mi programa que estoy utilizando un componente (Taco) y un componente (TBurrito) que hereda de taco. Ahora sólo en relación con el uso de la memoria de las clases y no los casos reales, que utiliza más memoria escenario?

A. Utilizando sólo el componente TBurrito todas partes

o

B. Usando una combinación de componentes de taco y TBurrito?

Mi único pensamiento es que desde TBurrito hereda Taco, Taco la clase ya está almacenado en la memoria y por lo tanto el uso no aumentará la huella de la memoria tanto.

* Nota -. Los nombres de los componentes no son realmente Taco Burrito y

¿Fue útil?

Solución

Cada instancia de Burrito ocupará al menos tanta memoria como una instancia de Taco. Taco.InstanceSize Restar de Burrito.InstanceSize para averiguar cuánto más.

El uso de Burrito exclusivamente no te salvará cualquier memoria; la definición de Taco seguirá existiendo, incluso si no tiene instancias de esa clase exacta, ya que, por lo menos, Burrito.ParentClass todavía tiene que referirse a él.

Usar el componente más pequeño que logra sus necesidades, pero a menos Burrito es enorme en comparación con Taco o si tiene un gran número de casos que podrían ser Burrito casos Taco lugar, es probable que no va a ver mucho efecto global sobre el uso de memoria. Que vendrán de abstenerse de formas enteras de carga, carga o sólo piezas de un archivo en lugar de todo el asunto.

Otros consejos

Las clases sólo tiene que utilizar la memoria para sus VMT. Hasta que realmente instancia de una clase, que no ocupa espacio, pero para el VMT, y sólo hay un VMT para cada clase. El tamaño VMT depende sólo de la cantidad de métodos virtuales de una clase tiene en realidad, porque hay una entrada para cada método virtual. Los métodos estáticos se resuelven en tiempo de compilación y no utilizan el espacio de memoria. Otros datos VMT se fijan en tamaño (aunque puede ser diferente en diferentes versión de Delphi). se introdujeron métodos dinámicos para mantener VMT más pequeño. Esto se debe a la herencia de una clase creará un nuevo VMT con todos los "slots" de los métodos virtuales de la clase padre, además de los de la clase heredada. métodos dinámicos utilizan en tiempo de ejecución el envío de código para tener en cuenta el método que se llama. Debido a que son un poco más lento, su uso se sugirió sólo para las clases que han sobrecargadas sólo unos pocos métodos de clases muy grandes matrices. Si la memoria no es un problema, no hay razones para utilizarlos. Lo que también podría utilizar el espacio de memoria son informaciones RTTI, aunque nunca se investigo en la forma en que se almacenan. De todos modos, si se utiliza una clase hija, su padre VMT debe ser necesario también, porque la clase hijo puede llamar a las heredadas. Pero a menos que utilice clase muy grande con una gran cantidad de métodos virtuales y pocos casos, supongo que la mayor parte de la memoria utilizada por la aplicación será el de instancias de clases, no VMT clase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top