Один из флагов, которые вы можете передать 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 или к сбою страницы, что дорого обойдется вам время ожидания (но не при использовании процессора).