2008-09-17 7 views
7

Wenn CoInitializeEx aufrufen, können Sie die folgenden Werte für dwCoInit angeben:Was macht COINIT_SPEED_OVER_MEMORY?

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

Was bedeutet die suggestiv dem Titel „Geschwindigkeit über Speicher“ tun Wert? Wird es heutzutage in COM ignoriert?

Antwort

11

Keine Ahnung, ob es noch verwendet wird, aber es wurde beabsichtigt, die von den COM-Algorithmen verwendete Balance zu ändern.

Wenn Sie Tonnen von Speicher und wollte Geschwindigkeit um jeden Preis, würden Sie diese Flagge setzen.

In Umgebungen mit geringem Arbeitsspeicher würde das Deaktivieren dieses Flags die Speicherauslastung verringern.


Wie sich herausstellt, die wunderbare Raymond Chen (von "The Old New Thing" Ruhm) hat jetzt wog zu diesem Thema und, trotz allem, was die Flagge war gemeint, es zu tun, anscheinend tut gar nichts.

Siehe What does the COINIT_SPEED_OVER_MEMORY flag to CoInitializeEx do? für weitere Informationen:

Wann sollten Sie diesen Modus aktivieren? Es spielt keine Rolle, denn soweit ich das beurteilen kann, gibt es in COM keinen Code, der sein Verhalten ändert, je nachdem ob der Prozess in diesen Modus versetzt wurde! Es sieht so aus, als wäre das Flag hinzugefügt worden, als DCOM eingeführt wurde, aber es wurde nie an irgendetwas angeschlossen. (Oder was auch immer Code, der nie ausgeliefert, um es angeschlossen worden ist.)

Auch http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html von Steve Swartz, einer der ursprünglichen COM + Architekten:

COINIT_SPEED_OVER_MEMORY von COM ignoriert.

+0

Irgendwelche Hinweise dafür? –

+0

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

0

Eine der Fahnen Sie CoInitializeEx passieren kann, ist COINIT_SPEED_OVER_MEMORY, die als dokumentiert ist: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY: Handels Speicher für Geschwindigkeit. Diese Dokumentation ist bereits vage, da sie nicht sagt, in welche Richtung der Handel gemacht wird. Verringern Sie den Arbeitsspeicher, um die Geschwindigkeit zu erhöhen, oder erhöhen Sie den Arbeitsspeicher, indem Sie die Geschwindigkeit reduzieren? Tatsächlich ist es keines: Wenn Sie dieses Flag übergeben, weisen Sie COM an, mehr Speicher zu verbrauchen, um die CPU-Auslastung zu reduzieren, vorausgesetzt, dass Sie schneller laufen, indem Sie weniger Zyklen ausführen. Prozess-Einweg-Übergang. Sobald irgendjemand irgendwo in dem Prozess COM in den Schnellspeichermodus versetzt, bleibt das Flag gesetzt und bleibt gesetzt, bis der Prozess endet.

Wann sollten Sie diesen Modus aktivieren? Es spielt keine Rolle, denn soweit ich das beurteilen kann, gibt es in COM keinen Code, der sein Verhalten ändert, je nachdem ob der Prozess in diesen Modus versetzt wurde! Es sieht so aus, als wäre das Flag hinzugefügt worden, als DCOM eingeführt wurde, aber es wurde nie an irgendetwas angeschlossen. (Oder welcher Code, der angeschlossen wurde, wurde nie ausgeliefert.)

¹ Wie Sie wissen, ist die Verwendung von mehr Arbeitsspeicher keine Garantie dafür, dass Sie schneller laufen, da höhere Speicherauslastung die Wahrscheinlichkeit erhöht, dass Sie einen L1 Cache-Fehler oder einen Seitenfehler benötigen teuer in der Wartezeit (wenn auch nicht in der CPU-Nutzung).

+0

Hey, du hast gerade meinen Artikel kopiert und wörtlich als Antwort gepostet, ohne Angabe. Das ist nicht sehr ehrlich. –

+0

Wollen Sie bitte Verweis auf Ihren Artikel.Ich erinnere mich wirklich nicht, es ist sehr alt. –

+0

Richtige Zuordnung liegt in Ihrer Verantwortung, nicht meins. –