Вопрос

При звонке CoInitializeEx, вы можете указать следующие значения для dwCoInit:

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

Что делает значение с многообещающим названием «скорость по сравнению с памятью»?Игнорируется ли это сейчас в COM?

Это было полезно?

Решение

Не знаю, используется ли он до сих пор, но он был предназначен для изменения баланса, используемого алгоритмами COM.

Если бы у вас была куча памяти и вы хотели бы добиться скорости любой ценой, вы бы установили этот флаг.

В средах с нехваткой памяти снятие этого флага будет способствовать уменьшению использования памяти.


Как оказалось, чудесное Раймонд Чен (из "Старая новая вещь" слава) теперь высказал свое мнение по этому вопросу и, несмотря на то, что это был за флаг имел в виду сделать, он, по-видимому, вообще ничего не делает.

Видеть Что делает флаг COINIT_SPEED_OVER_MEMORY для CoInitializeEx? Больше подробностей:

Когда следует включать этот режим?Это не имеет значения, потому что, насколько я могу судить, в COM нет кода, который бы менял свое поведение в зависимости от того, был ли процесс переведен в этот режим!Похоже, что этот флаг был добавлен при появлении DCOM, но он ни к чему не был привязан.(Или любой код, который был к нему подключен, так и не был отправлен.)

Также http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html от Стива Шварца, одного из первых архитекторов COM+:

COINIT_SPEED_OVER_MEMORY игнорируется COM.

Другие советы

Одним из флагов, который вы можете передать в CoInitializeEx, является COINIT_SPEED_OVER_MEMORY, который документирован как: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY:Обменяйте память на скорость.Эта документация уже расплывчата, поскольку в ней не указано, в каком направлении осуществляется торговля.Вы уменьшаете память, чтобы увеличить скорость, или увеличиваете память, уменьшая скорость?На самом деле это ни то, ни другое:Если вы передадите этот флаг, вы дадите COM команду использовать больше памяти в попытке снизить загрузку ЦП, исходя из предположения, что вы работаете быстрее, выполняя меньше циклов.¹

Запрос представляет собой односторонний переход для каждого процесса.Как только кто-либо в каком-либо месте процесса переводит COM в режим превышения скорости памяти, флаг остается установленным и остается установленным до тех пор, пока процесс не завершится.

Когда следует включать этот режим?Это не имеет значения, потому что, насколько я могу судить, в COM нет кода, который бы менял свое поведение в зависимости от того, был ли процесс переведен в этот режим!Похоже, что этот флаг был добавлен при появлении DCOM, но он ни к чему не был привязан.(Или любой код, который был к нему подключен, так и не был отправлен.)

¹ Как вы знаете, потребление большего количества памяти не является гарантией того, что вы действительно будете работать быстрее, поскольку более высокое использование памяти увеличивает вероятность того, что то, что вам нужно, приведет к промаху кэша L1 или ошибке страницы, что будет дорого стоить вам во время ожидания ( хотя и не в использовании процессора).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top