Domanda

Quando chiami CoInitializeEx, è possibile specificare i seguenti valori per dwCoInit:

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

Cosa fa il valore dal titolo suggestivo "velocità rispetto alla memoria"?Viene ignorato in questi giorni in COM?

È stato utile?

Soluzione

Non ho idea se sia ancora utilizzato, ma era destinato a modificare l'equilibrio utilizzato dagli algoritmi COM.

Se avessi tonnellate di memoria e volessi la velocità a tutti i costi, imposteresti quella bandiera.

In ambienti con poca memoria, lasciare disattivato il flag favorirebbe un utilizzo ridotto della memoria.


A quanto pare, il meraviglioso Raymond Chen (Di "La vecchia cosa nuova" fama) è ormai intervenuto sull’argomento e, malgrado ciò che era quella bandiera significava da fare, apparentemente non fa nulla.

Vedere Cosa fa il flag COINIT_SPEED_OVER_MEMORY su CoInitializeEx? per ulteriori dettagli:

Quando dovresti abilitare questa modalità?Non importa, perché per quanto ne so, non c'è codice da nessuna parte in COM che cambi il suo comportamento a seconda che il processo sia stato messo in questa modalità!Sembra che il flag sia stato aggiunto quando è stato introdotto DCOM, ma non è mai stato collegato a nulla.(O qualsiasi codice collegato non è mai stato spedito.)

Anche http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html da Steve Swartz, uno degli architetti COM+ originali:

COINIT_SPEED_OVER_MEMORY viene ignorato da COM.

Altri suggerimenti

Uno dei flag che puoi passare a CoInitializeEx è COINIT_SPEED_OVER_MEMORY, che è documentato come: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY:Scambia la memoria con la velocità.Questa documentazione è già vaga poiché non dice in quale direzione viene effettuato lo scambio.Stai riducendo la memoria per aumentare la velocità o stai aumentando la memoria riducendo la velocità?In realtà non è nessuno dei due:Se passi questo flag, stai indicando a COM di consumare più memoria nel tentativo di ridurre l'utilizzo della CPU, presupponendo che tu funzioni più velocemente eseguendo meno cicli.¹

La richiesta è una transizione unidirezionale per processo.Una volta che qualcuno in qualsiasi punto del processo mette COM in modalità speed-over-memory, il flag rimane impostato e rimane impostato fino all'uscita del processo.

Quando dovresti abilitare questa modalità?Non importa, perché per quanto ne so, non c'è codice da nessuna parte in COM che cambi il suo comportamento a seconda che il processo sia stato messo in questa modalità!Sembra che il flag sia stato aggiunto quando è stato introdotto DCOM, ma non è mai stato collegato a nulla.(O qualsiasi codice collegato non è mai stato spedito.)

¹ Come sai, consumare più memoria non è una garanzia che correrai effettivamente più velocemente, perché un utilizzo maggiore della memoria aumenta le possibilità che ciò di cui hai bisogno subisca un errore di cache L1 o un errore di pagina, che ti costerà caro in termini di tempo di attesa ( anche se non nell'utilizzo della CPU).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top