COINIT_SPEED_OVER_MEMORYは何をするのですか?

com
COINIT_SPEED_OVER_MEMORYは何をするのですか?

CoInitializeEx`を呼び出すときに、 dwCoInit`に以下の値を指定することができます。

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

「スピードオーバーメモリ」の値はどういう意味ですか。 COMでは最近無視されていますか。

  7  0


ベストアンサー

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

あなたが大量のメモリを持っていて、すべての犠牲を払ってスピードが欲しいなら、あなたはそのフラグをセットするでしょう。

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

” ” ‘

結局のところ、驚くべきhttps://stackoverflow.com/users/902497/raymond-chen [Raymond Chen](http://blogs.msdn.com/b/oldnewthing/[” The Old New Thing “]の)] fame)は現在、この問題を重視しており、そのフラグが「すること」を意味していたにもかかわらず、明らかに何もしていないようです。

詳細については、_http://blogs.msdn.com/b/oldnewthing/archive/2012/11/08/10366704.aspx [CoInitializeExに対するCOINIT_SPEED_OVER_MEMORYフラグは何をするのですか?] _を参照してください。

_
いつこのモードを有効にするべきですか? 私が言うことができる限り、プロセスがこのモードに置かれたかどうかに基づいてその動作を変えるコードがCOMのどこにもないので、それは問題ではありません! DCOMが導入されたときにフラグが追加されたように見えますが、何にも結び付いたことはありません。 (あるいは、それにフックされていたどんなコードでも出荷されたことはありません。)
_

元のCOMアーキテクトの1人であるSteve Swartzによるhttp://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.htmlもあります。

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

11


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

COINIT_SPEED_OVER_MEMORY:スピードのためにメモリを交換します。 この文書は、貿易がどの方向に向かっているのかを述べていないので、すでにあいまいです。 速度を上げるためにメモリを減らしていますか、それとも速度を下げてメモリを増やしていますか? 実際にはどちらでもありません。このフラグを渡すと、実行するサイクル数が減って高速に実行されるという前提で、CPUの使用量を減らすためにCOMにメモリをもっと消費するように指示しています。

要求はプロセスごとの一方向の移行です。 プロセス内の誰かがCOMをスピードオーバーメモリモードにすると、フラグは設定されたままになり、プロセスが終了するまで設定されたままになります。

いつこのモードを有効にするべきですか? 私が言うことができる限り、プロセスがこのモードに置かれたかどうかに基づいてその動作を変えるコードがCOMのどこにもないので、それは問題ではありません! DCOMが導入されたときにフラグが追加されたように見えますが、何にも結び付いたことはありません。 (あるいは、それにフックされていたどんなコードでも出荷されたことはありません。)

¹ご存じのように、メモリ使用量が多いとL1キャッシュミスやページフォルトが発生する可能性が高くなり、待ち時間が非常に長くなるため、実際にはメモリの使用量を増やすことが実際に高速になる保証はありません。 CPU使用率ではありませんが)。

0


タイトルとURLをコピーしました