Что делает COINIT_SPEED_OVER_MEMORY? - PullRequest
7 голосов
/ 17 сентября 2008

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

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

Что делает предположительно названное значение «скорость по памяти»? Это игнорируется в наши дни в COM?

Ответы [ 2 ]

11 голосов
/ 17 сентября 2008

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

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

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


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

См. Что делает флаг COINIT_SPEED_OVER_MEMORY для CoInitializeEx? для получения более подробной информации:

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

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

COMIN игнорирует COINIT_SPEED_OVER_MEMORY.

0 голосов
/ 08 июля 2015

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...