2008-09-17 6 views
7

Al llamar CoInitializeEx, puede especificar los siguientes valores para dwCoInit:¿Qué hace COINIT_SPEED_OVER_MEMORY?

typedef enum tagCOINIT { 
    COINIT_MULTITHREADED  = 0x0, 
    COINIT_APARTMENTTHREADED = 0x2, 
    COINIT_DISABLE_OLE1DDE = 0x4, 
    COINIT_SPEED_OVER_MEMORY = 0x8, 
} COINIT; 

¿Qué hace el valor sugestivamente titulado "velocidad sobre la memoria"? ¿Se ignora estos días en COM?

Respuesta

11

No tiene idea si todavía se usa, pero estaba destinado a cambiar el equilibrio utilizado por los algoritmos COM.

Si tuviera toneladas de memoria y quería velocidad a toda costa, establecería esa bandera.

En entornos con poca memoria, dejar esa marca favorecería la reducción del uso de la memoria.


Como resultado, la maravillosa Raymond Chen ("The Old New Thing" de fama) ahora ha intervenido en el tema y, a pesar de lo que significaba bandera era que hacer, al parecer, no hace nada en absoluto.

Ver What does the COINIT_SPEED_OVER_MEMORY flag to CoInitializeEx do? para más detalles:

¿Cuándo se debe activar 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 lo que el código que se había enganchado hasta nunca enviado.)

también http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html de Steve Swartz, uno de los arquitectos originales + COM:

COINIT_SPEED_OVER_MEMORY es ignorado por COM.

+0

¿Alguna referencia para eso? –

+0

http://msdn.microsoft.com/en-us/library/ms678505(VS.85).aspx – paxdiablo

0

Una de las banderas se pueden pasar a CoInitializeEx es COINIT_SPEED_OVER_MEMORY, que se documenta como: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY: Memoria de Comercio para la 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, ordena a COM que consuma más memoria en un intento de reducir el uso de la CPU, bajo la suposición de que ejecuta más rápido ejecutando menos ciclos.¹

La solicitud es una procesar la transición unidireccional 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ía activar 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 ya sabe, consumir más memoria no es garantía de que realmente vaya a funcionar más rápido, porque un mayor uso de memoria aumenta las posibilidades de que lo que necesita sea un caché L1 o un error de página, lo que le costará caro en el tiempo de espera (aunque no en el uso de la CPU).

+0

Oye, acaba de copiar mi artículo y lo publicó textualmente como una respuesta, sin atribución. Eso no es muy honesto. –

+0

¿Podría poner la referencia de su artículo? Realmente no recuerdo que sea muy viejo. –

+0

La atribución correcta es su responsabilidad, no la mía. –