com - sports - periodico deportivo
¿Qué hace COINIT_SPEED_OVER_MEMORY? (2)
Al llamar a CoInitializeEx
, puede especificar los siguientes valores para dwCoInit
:
typedef enum tagCOINIT {
COINIT_MULTITHREADED = 0x0,
COINIT_APARTMENTTHREADED = 0x2,
COINIT_DISABLE_OLE1DDE = 0x4,
COINIT_SPEED_OVER_MEMORY = 0x8,
} COINIT;
¿Qué hace el sugestivo valor de "velocidad sobre la memoria"? ¿Se ignora estos días en COM?
Uno de los indicadores que puede pasar a CoInitializeEx es COINIT_SPEED_OVER_MEMORY, que está documentado como: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx
COINIT_SPEED_OVER_MEMORY: Cambia la memoria por velocidad. Esta documentación ya es vaga ya que no indica en qué dirección se está realizando la operación. ¿Está reduciendo la memoria para aumentar la velocidad o aumentar la memoria reduciendo la velocidad? En realidad, no es ninguno de los dos: si pasa este indicador, está ordenando a COM que consuma más memoria en un intento de reducir el uso de la CPU, bajo la suposición de que se ejecuta más rápido ejecutando menos ciclos.¹
La solicitud es una transición unidireccional por proceso. Una vez que alguien en cualquier parte del proceso pone COM en el modo de velocidad sobre memoria, la bandera permanece establecida y permanece establecida hasta que el proceso finaliza.
¿Cuándo deberías habilitar este modo? No importa, porque hasta donde puedo decir, no hay ningún código en ningún lugar de COM que cambie su comportamiento en función de si el proceso se ha colocado en este modo. Parece que la bandera se agregó cuando se presentó DCOM, pero nunca se conectó a nada. (O cualquier código que haya sido conectado nunca se envió).
¹ Como sabes, consumir más memoria no es garantía de que realmente corras más rápido, porque un mayor uso de memoria aumenta las posibilidades de que lo que necesites será un error de caché L1 o de página, lo que te costará caro en el tiempo de espera ( aunque no en el uso de la CPU).
No tengo idea de si todavía se usa, pero estaba destinado a cambiar el equilibrio utilizado por los algoritmos COM.
Si tuviera toneladas de memoria y deseara velocidad a toda costa, establecería esa bandera.
En entornos con poca memoria, dejar esa marca favorecería un uso reducido de la memoria.
Al final, la maravillosa fama de Raymond Chen (de "The Old New Thing" ) ahora ha influido en el tema y, a pesar de lo que se suponía que debía hacer esa bandera, aparentemente no hace nada en absoluto.
Consulte ¿Qué hace el indicador COINIT_SPEED_OVER_MEMORY para CoInitializeEx? para más detalles:
¿Cuándo deberías habilitar este modo? No importa, porque hasta donde puedo decir, no hay ningún código en ningún lugar de COM que cambie su comportamiento en función de si el proceso se ha colocado en este modo. Parece que la bandera se agregó cuando se presentó DCOM, pero nunca se conectó a nada. (O cualquier código que haya sido conectado nunca se envió).
También http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html de Steve Swartz, uno de los arquitectos COM + originales:
COINIT_SPEED_OVER_MEMORY es ignorado por COM.