COINIT_SPEED_OVER_MEMORY有什么作用?

时间:2008-09-17 05:01:22

标签: com

调用CoInitializeEx时,您可以为dwCoInit指定以下值:

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

具有暗示性的“速度超过记忆”值有什么作用?这些天在COM中被忽略了吗?

2 个答案:

答案 0 :(得分:11)

不知道它是否仍在使用,但它的目的是改变COM算法使用的平衡。

如果您不惜一切代价拥有大量的内存和想要的速度,那么您可以设置该标志。

在低内存环境中,关闭该标志将有利于减少内存使用。


事实证明,奇妙的Raymond Chen"The Old New Thing"成名)现在已经对这个主题进行了权衡,尽管该标志是意味着做什么,但它显然什么也没做。

有关详细信息,请参阅 What does the COINIT_SPEED_OVER_MEMORY flag to CoInitializeEx do?

  

什么时候应该启用此模式?没关系,因为据我所知,COM中的任何地方都没有代码根据流程是否已置于此模式而改变其行为!看起来在引入DCOM时添加了标志,但它从未被连接到任何东西。 (或者任何连接它的代码从未发货过。)

来自最初的COM +架构师之一Steve Swartz的http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html

  

COM忽略COINIT_SPEED_OVER_MEMORY。

答案 1 :(得分:0)

您可以传递给CoInitializeEx的其中一个标志是COINIT_SPEED_OVER_MEMORY,其记录为:https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY:交易记忆的速度。 该文件已经含糊不清,因为它没有说明交易的方向。您是通过降低速度来减少内存以提高速度还是增加内存?实际上它既不是:如果你传递了这个标志,那么你是在指示COM消耗更多内存以试图减少CPU使用率,假设你通过执行更少的周期来更快地运行.¹

请求是按进程单向转换。一旦进程中的任何人将COM置于速度超过内存模式,该标志将保持设置并保持设置,直到进程退出。

什么时候应该启用此模式?没关系,因为据我所知,COM中的任何地方都没有代码根据流程是否已置于此模式而改变其行为!看起来在引入DCOM时添加了标志,但它从未被连接到任何东西。 (或者任何连接它的代码从未发货过。)

¹正如您所知,消耗更多内存并不能保证您实际运行得更快,因为更高的内存使用量会增加您所需的内容将导致L1缓存未命中或页面错误的可能性,这将使您付出沉重的代价。等待时间(虽然不是CPU使用率)。