سؤال

عند الاتصال CoInitializeEx, ، يمكنك تحديد القيم التالية لـ dwCoInit:

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

ماذا تفعل قيمة "السرعة على الذاكرة" التي تحمل عنوانًا موحيًا؟هل يتم تجاهله هذه الأيام في COM؟

هل كانت مفيدة؟

المحلول

لا توجد فكرة عما إذا كان لا يزال قيد الاستخدام ولكن كان المقصود منه تغيير التوازن الذي تستخدمه خوارزميات COM.

إذا كان لديك الكثير من الذاكرة وتريد السرعة بأي ثمن، فستضع هذا العلم.

في البيئات ذات الذاكرة المنخفضة، يؤدي ترك هذه العلامة إلى تقليل استخدام الذاكرة.


كما تبين، الرائع ريمون تشين"الشيء القديم الجديد" الشهرة) قد أثرت الآن في هذا الموضوع، وعلى الرغم من ما كان عليه هذا العلم عنى للقيام به، يبدو أنه لا يفعل شيئا على الإطلاق.

يرى ما الذي تفعله علامة COINIT_SPEED_OVER_MEMORY لـ CoInitializeEx؟ لمزيد من التفاصيل:

متى يجب عليك تمكين هذا الوضع؟لا يهم، لأنه بقدر ما أستطيع أن أقول، لا يوجد أي كود في أي مكان في COM يغير سلوكه بناءً على ما إذا كانت العملية قد تم وضعها في هذا الوضع!يبدو أنه تمت إضافة العلامة عند تقديم DCOM، ولكن لم يتم ربطها بأي شيء على الإطلاق.(أو أي رمز تم توصيله به لم يتم شحنه مطلقًا.)

أيضًا http://archives.neohapsis.com/archives/microsoft/various/dcom/2001-q1/0160.html من Steve Swartz، أحد مهندسي COM+ الأصليين:

يتم تجاهل 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:استبدل الذاكرة بالسرعة.هذه الوثائق غامضة بالفعل لأنها لا تحدد الاتجاه الذي تتم فيه التجارة.هل تقوم بتقليل الذاكرة لزيادة السرعة أم زيادة الذاكرة بتقليل السرعة؟في الواقع ليس كذلك:إذا قمت بتمرير هذه العلامة، فأنت تطلب من COM استهلاك المزيد من الذاكرة في محاولة لتقليل استخدام وحدة المعالجة المركزية (CPU)، على افتراض أنك تعمل بشكل أسرع من خلال تنفيذ دورات أقل.¹

الطلب عبارة عن انتقال أحادي الاتجاه لكل عملية.بمجرد أن يقوم أي شخص في أي مكان في العملية بوضع COM في وضع السرعة فوق الذاكرة، تظل العلامة مضبوطة وتظل مضبوطة حتى تنتهي العملية.

متى يجب عليك تمكين هذا الوضع؟لا يهم، لأنه بقدر ما أستطيع أن أقول، لا يوجد أي كود في أي مكان في COM يغير سلوكه بناءً على ما إذا كانت العملية قد تم وضعها في هذا الوضع!يبدو أنه تمت إضافة العلامة عند تقديم DCOM، ولكن لم يتم ربطها بأي شيء على الإطلاق.(أو أي رمز تم توصيله به لم يتم شحنه مطلقًا.)

¹ كما تعلم، فإن استهلاك المزيد من الذاكرة لا يضمن أنك ستعمل فعليًا بشكل أسرع، لأن الاستخدام الأعلى للذاكرة يزيد من احتمالات أن ما تحتاجه سيتسبب في فقدان ذاكرة التخزين المؤقت L1 أو خطأ في الصفحة، مما سيكلفك غاليًا في وقت الانتظار ( وإن لم يكن في استخدام وحدة المعالجة المركزية).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top