Pregunta

al llamar 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 valor sugerentemente titulado "velocidad sobre memoria"?¿Se ignora hoy en día en COM?

¿Fue útil?

Solución

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

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

En entornos con poca memoria, dejar esa bandera desactivada favorecería un uso reducido de la memoria.


Resulta que lo maravilloso Raymond Chen (de "Lo viejo y nuevo" fama) ahora ha intervenido en el tema y, a pesar de lo que esa bandera era quiso decir hacer, aparentemente no hace nada en absoluto.

Ver ¿Qué hace el indicador COINIT_SPEED_OVER_MEMORY para CoInitializeEx? para más detalles:

¿Cuándo debería habilitar este modo?¡No importa, porque hasta donde yo sé, no hay ningún código en ninguna parte 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 introdujo DCOM, pero nunca se conectó a nada.(O cualquier código que se le hubiera 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 originales de COM+:

COM ignora COINIT_SPEED_OVER_MEMORY.

Otros consejos

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:Cambie la memoria por la velocidad.Esta documentación ya es vaga ya que no dice en qué dirección se realiza el comercio.¿Está reduciendo la memoria para aumentar la velocidad o aumentando la memoria reduciendo la velocidad?En realidad no es ninguno de los dos:Si pasa este indicador, le está indicando a COM que consuma más memoria en un intento de reducir el uso de la CPU, bajo el supuesto de que corre más rápido al ejecutar menos ciclos.¹

La solicitud es una transición unidireccional por proceso.Una vez que alguien en cualquier parte del proceso pone COM en modo de velocidad sobre memoria, el indicador permanece configurado y permanece así hasta que finaliza el proceso.

¿Cuándo debería habilitar este modo?¡No importa, porque hasta donde yo sé, no hay ningún código en ninguna parte 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 introdujo DCOM, pero nunca se conectó a nada.(O cualquier código que se le hubiera conectado nunca se envió).

¹ Como sabe, consumir más memoria no es garantía de que realmente funcionará más rápido, porque un mayor uso de memoria aumenta las posibilidades de que lo que necesita sufra una pérdida de caché L1 o un error de página, lo que le costará muy caro en tiempo de espera ( aunque no en el uso de la CPU).

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