문제

전화할 때 CoInitializeEx, 에 대해 다음 값을 지정할 수 있습니다. dwCoInit:

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

"메모리를 통한 속도"라는 암시적인 제목의 값은 무엇을 합니까?요즘 COM에서는 무시되나요?

도움이 되었습니까?

해결책

아직 사용되고 있는지는 알 수 없지만 COM 알고리즘에서 사용하는 균형을 변경하기 위한 것입니다.

엄청난 양의 메모리가 있고 무슨 수를 써서라도 속도를 원한다면 해당 플래그를 설정하면 됩니다.

메모리가 부족한 환경에서는 해당 플래그를 꺼두면 메모리 사용량이 줄어듭니다.


밝혀진 바에 따르면, 놀라운 일이 레이먼드 첸 (의 "오래된 새로운 것" 명성)은 이제 이 주제에 무게를 두었고, 그 깃발이 무엇이었음에도 불구하고 의미했다 분명히 아무것도 하지 않는 것 같습니다.

보다 CoInitializeEx에 대한 COINIT_SPEED_OVER_MEMORY 플래그는 무엇을 합니까? 상세 사항은:

언제 이 모드를 활성화해야 합니까?내가 알 수 있는 한 COM에는 프로세스가 이 모드에 있는지 여부에 따라 동작을 변경하는 코드가 없기 때문에 중요하지 않습니다.DCOM이 도입되었을 때 플래그가 추가된 것처럼 보이지만 어떤 것에도 연결되지 않았습니다.(또는 연결된 코드가 배송되지 않았습니다.)

또한 http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html 최초의 COM+ 설계자 중 한 명인 Steve Swartz의 글:

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:속도를 위해 메모리를 교환하세요.이 문서는 거래가 어느 방향으로 진행되고 있는지 알려주지 않기 때문에 이미 모호합니다.속도를 높이기 위해 메모리를 줄이시나요, 아니면 속도를 줄여서 메모리를 늘리시나요?실제로는 둘 다 아닙니다.이 플래그를 전달하면 더 적은 주기를 실행하여 더 빠르게 실행한다는 가정 하에 CPU 사용량을 줄이기 위해 COM에 더 많은 메모리를 소비하도록 지시하는 것입니다.

요청은 프로세스별 단방향 전환입니다.프로세스의 어느 곳에서든 COM을 메모리 초과 속도 모드로 전환하면 플래그는 설정된 상태로 유지되며 프로세스가 종료될 때까지 설정된 상태를 유지합니다.

언제 이 모드를 활성화해야 합니까?내가 알 수 있는 한 COM에는 프로세스가 이 모드에 있는지 여부에 따라 동작을 변경하는 코드가 없기 때문에 중요하지 않습니다.DCOM이 도입되었을 때 플래그가 추가된 것처럼 보이지만 어떤 것에도 연결되지 않았습니다.(또는 연결된 코드가 배송되지 않았습니다.)

¹ 아시다시피, 더 많은 메모리를 소비한다고 해서 실제로 더 빠르게 실행된다는 보장은 없습니다. 왜냐하면 메모리 사용량이 높을수록 필요한 것이 L1 캐시 미스나 페이지 오류를 겪게 되어 대기 시간이 많이 소요될 가능성이 높아지기 때문입니다( CPU 사용량은 아니지만).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top