2008-09-17 4 views
7

Khi gọi CoInitializeEx, bạn có thể chỉ định các giá trị sau cho dwCoInit:COINIT_SPEED_OVER_MEMORY làm gì?

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

không giá trị suggestively tựa đề "tốc độ trên bộ nhớ" làm gì? Có bị bỏ qua những ngày này trong COM?

Trả lời

11

Không có ý tưởng nếu nó vẫn được sử dụng nhưng nó đã có nghĩa là để thay đổi số dư được sử dụng bởi các thuật toán COM.

Nếu bạn có nhiều bộ nhớ và tốc độ mong muốn bằng mọi giá, bạn sẽ đặt cờ đó.

Trong môi trường bộ nhớ thấp, việc bỏ cờ đó sẽ ưu tiên giảm mức sử dụng bộ nhớ.


Khi nó quay ra, diệu Raymond Chen (của "The Old New Thing" nổi tiếng) bây giờ đã cân nhắc về đề tài này, và mặc dù những gì cờ đó là nghĩa để làm, nó dường như không làm gì cả.

Xem What does the COINIT_SPEED_OVER_MEMORY flag to CoInitializeEx do? để biết thêm chi tiết:

Khi bạn nên kích hoạt chế độ này? Nó không quan trọng, bởi vì như xa như tôi có thể nói, không có mã bất cứ nơi nào trong COM thay đổi hành vi của nó dựa trên việc quá trình đã được đặt vào chế độ này! Có vẻ như lá cờ đã được thêm vào khi DCOM được giới thiệu, nhưng nó không bao giờ được nối với bất cứ thứ gì. (Hoặc bất kỳ mã đó đã được nối với nó không bao giờ vận chuyển.)

Cũng http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html từ Steve Swartz, một trong những kiến ​​trúc sư COM + gốc:

COINIT_SPEED_OVER_MEMORY được bỏ qua bởi COM.

+0

Bất kỳ tham chiếu nào về điều đó? –

+0

http://msdn.microsoft.com/en-us/library/ms678505(VS.85).aspx – paxdiablo

0

Một trong những lá cờ bạn có thể vượt qua để CoInitializeEx là COINIT_SPEED_OVER_MEMORY, mà là tài liệu như: https://msdn.microsoft.com/en-us/library/ms678505(v=VS.85).aspx

COINIT_SPEED_OVER_MEMORY: nhớ thương cho tốc độ. Tài liệu này đã mơ hồ vì nó không nói hướng thương mại đang được thực hiện. Bạn đang giảm bộ nhớ để tăng tốc độ, hoặc tăng bộ nhớ bằng cách giảm tốc độ? Trên thực tế nó không phải là: Nếu bạn vượt qua lá cờ này, sau đó bạn đang hướng dẫn COM để tiêu thụ nhiều bộ nhớ hơn trong một nỗ lực để giảm sử dụng CPU, theo giả định rằng bạn chạy nhanh hơn bằng cách thực hiện ít chu kỳ.¹

Yêu cầu là một quá trình chuyển đổi một chiều. Khi ai đó ở bất kỳ nơi nào trong quá trình đặt COM vào chế độ tốc độ bộ nhớ, cờ vẫn được đặt và vẫn được đặt cho đến khi quá trình thoát.

Khi nào bạn nên bật chế độ này? Nó không quan trọng, bởi vì như xa như tôi có thể nói, không có mã bất cứ nơi nào trong COM thay đổi hành vi của nó dựa trên việc quá trình đã được đặt vào chế độ này! Có vẻ như lá cờ đã được thêm vào khi DCOM được giới thiệu, nhưng nó không bao giờ được nối với bất cứ thứ gì. (Hoặc bất kỳ mã nào đã được nối với nó không bao giờ được vận chuyển.Như bạn đã biết, tiêu thụ nhiều bộ nhớ hơn không đảm bảo rằng bạn sẽ thực sự chạy nhanh hơn, vì việc sử dụng bộ nhớ cao hơn làm tăng cơ hội mà bạn cần sẽ bị mất bộ nhớ cache L1 hoặc lỗi trang. trong thời gian chờ đợi (mặc dù không sử dụng CPU).

+0

Xin chào, bạn vừa sao chép bài viết của tôi và đăng nguyên văn đó làm câu trả lời, không có ghi nhận tác giả. Đó không phải là rất trung thực. –

+0

Bạn vui lòng tham khảo bài viết của bạn. Tôi thực sự không nhớ nó rất cũ. –

+0

Phân bổ đúng là trách nhiệm của bạn, không phải của tôi. –