Pergunta

Ao ligar CoInitializeEx, você pode especificar os seguintes valores para dwCoInit:

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

O que o valor sugestivamente intitulado "velocidade sobre memória" faz?É ignorado atualmente no COM?

Foi útil?

Solução

Não faço ideia se ainda é usado, mas o objetivo era alterar o equilíbrio usado pelos algoritmos COM.

Se você tivesse muita memória e quisesse velocidade a todo custo, você definiria esse sinalizador.

Em ambientes com pouca memória, deixar esse sinalizador desativado favoreceria a redução do uso de memória.


Acontece que o maravilhoso Raymond Chen (de "A velha coisa nova" fama) já opinou sobre o assunto e, apesar do que aquela bandeira era significou fazer, aparentemente não faz nada.

Ver O que o sinalizador COINIT_SPEED_OVER_MEMORY para CoInitializeEx faz? para mais detalhes:

Quando você deve ativar este modo?Não importa, porque até onde eu sei, não há nenhum código em nenhum lugar do COM que altere seu comportamento com base no fato de o processo ter sido colocado nesse modo!Parece que o sinalizador foi adicionado quando o DCOM foi introduzido, mas nunca foi conectado a nada.(Ou qualquer código que tenha sido conectado a ele nunca foi enviado.)

Também http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html de Steve Swartz, um dos arquitetos originais do COM+:

COINIT_SPEED_OVER_MEMORY é ignorado por COM.

Outras dicas

Um dos sinalizadores que você pode passar para CoInitializeEx é COINIT_SPEED_OVER_MEMORY, que está documentado como: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY:Troque memória por velocidade.Esta documentação já é vaga, pois não diz em que direção a negociação está sendo feita.Você está reduzindo a memória para aumentar a velocidade ou aumentando a memória reduzindo a velocidade?Na verdade não é nenhum dos dois:Se você passar esse sinalizador, estará instruindo o COM a consumir mais memória na tentativa de reduzir o uso da CPU, supondo que você execute mais rápido executando menos ciclos.¹

A solicitação é uma transição unidirecional por processo.Depois que qualquer pessoa em qualquer lugar do processo coloca o COM no modo de velocidade sobre memória, o sinalizador permanece definido e permanece definido até que o processo seja encerrado.

Quando você deve ativar este modo?Não importa, porque até onde eu sei, não há nenhum código em nenhum lugar do COM que altere seu comportamento com base no fato de o processo ter sido colocado nesse modo!Parece que o sinalizador foi adicionado quando o DCOM foi introduzido, mas nunca foi conectado a nada.(Ou qualquer código que tenha sido conectado a ele nunca foi enviado.)

¹ Como você sabe, consumir mais memória não é garantia de que você realmente rodará mais rápido, porque o maior uso de memória aumenta as chances de que o que você precisa leve a uma falta de cache L1 ou falha de página, o que custará caro em tempo de espera ( embora não no uso da CPU).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top