質問

電話をかけるとき CoInitializeEx, 、次の値を指定できます。 dwCoInit:

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

思わせぶりなタイトルの「メモリを超える速度」の値は何をするのでしょうか?最近COMでは無視されているのでしょうか?

役に立ちましたか?

解決

まだ使用されているかどうかはわかりませんが、COM アルゴリズムで使用されるバランスを変更することを目的としていました。

大量のメモリがあり、何としても速度を上げたい場合は、そのフラグを設定するでしょう。

メモリが少ない環境では、そのフラグをオフのままにしておくと、メモリ使用量が削減されます。


結局のところ、驚くべきことは、 レイモンド・チェン (の 「古くて新しいもの」 名声)が今ではこの問題に真剣に取り組んでおり、その旗が何であったかにもかかわらず、 意味 するとしても、どうやらまったく何もしません。

見る CoInitializeEx に対する COINIT_SPEED_OVER_MEMORY フラグは何をしますか? 詳細については:

このモードをいつ有効にすべきでしょうか?私の知る限り、プロセスがこのモードに設定されているかどうかに基づいて動作を変更するコードは COM のどこにも存在しないため、それは問題ではありません。このフラグは DCOM の導入時に追加されたようですが、何も関連付けられることはありませんでした。(または、それに接続されていたコードは出荷されませんでした。)

また http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html 元の COM+ アーキテクトの 1 人、Steve Swartz より:

COINIT_SPEED_OVER_MEMORY は COM によって無視されます。

他のヒント

CoInitializeEx に渡すことができるフラグの 1 つは COINIT_SPEED_OVER_MEMORY で、次のように文書化されています。 https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY:メモリと引き換えに速度を確保します。この文書には取引がどの方向に行われているかが記載されていないため、すでに曖昧になっています。速度を上げるためにメモリを減らしていますか、それとも速度を下げてメモリを増やしていますか?実際にはどちらでもありません:このフラグを渡すと、より少ないサイクルで実行することでより高速に実行できるという前提の下で、CPU 使用率を削減するためにより多くのメモリを消費するように COM に指示することになります。¹

リクエストはプロセスごとの一方向の遷移です。プロセス内の誰かが COM をメモリ優先モードにすると、フラグは設定されたままになり、プロセスが終了するまで設定されたままになります。

このモードをいつ有効にすべきでしょうか?私の知る限り、プロセスがこのモードに設定されているかどうかに基づいて動作を変更するコードは COM のどこにも存在しないため、それは問題ではありません。このフラグは DCOM の導入時に追加されたようですが、何も関連付けられることはありませんでした。(または、それに接続されていたコードは出荷されませんでした。)

¹ ご存知のとおり、メモリの使用量が増えると、必要な処理で L1 キャッシュ ミスやページ フォールトが発生する可能性が高まり、待機時間に多大なコストがかかるため、メモリの消費量が増えても実際に高速に動作するという保証はありません (ただし、CPU 使用率ではありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top