تطبيق القوة C# لاستخدام نواة واحدة في جهاز كمبيوتر مع معالج متعدد الأزهار

StackOverflow https://stackoverflow.com/questions/3429999

  •  26-09-2019
  •  | 
  •  

سؤال

مرحبًا يا شباب ، قد يبدو هذا السؤال غريبًا ، لكنني أستخدم لاعب Haptek People Pudty لتطبيق C# ورأيت أشخاصًا يقولون في المنتديات أنه لا يعمل بشكل جيد مع معالج متعدد النطاق. يعمل طلبي بشكل جيد على جهاز الكمبيوتر المحمول Core 2 Duo ولكنه يتخلف كثيرًا عندما أحاول تشغيله على سطح مكتب رباعي Core. كنت أفكر في التحقيق في هذا بنفسي وفي هذه الحالة ، سأضطر إلى إجبار طلبي على الركض في قلب واحد. هل هذا ممكن في C#؟ شكرًا!

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

المحلول

اين ا Process عامل proc يحمل العملية التي تهتم بها (Process.GetCurrentProcess() لعملية التشغيل ، الحصول عليها من GetProcesses() أو GetProcessesByName() وما إلى ذلك لعملية أخرى. ثم:

foreach(ProcessThread pt in proc.Threads)
{
   pt.IdealProcessor = 0;
   pt.ProcessorAffinity = (IntPtr)1;
}

IdealProcessor هو هوية قائمة على النور الواحد. Processoraffinity هو bitmask ، لذلك 1 يتيح Core Zero ، 2 يسمح Core One ، 3 يسمح للنوى صفر والآخر ، 4 يسمح Core 2 ، وهكذا.

أود اختبار هذا بدقة. هناك احتمالات قوية جدًا لأن هذا سيضر فعليًا بأدائك ، في تقليل القدرة على الاستفادة من النوى المختلفة ، وهي ميزة بعد كل شيء بشكل عام.

نصائح أخرى

إذا كان التطبيق متخلفًا واحدًا ، فلن يستفيد من النوى المتعددة. ومع ذلك ، فمن الممكن أن الن kernel يمكن أن تصطدم الخيط بين النوى. أشك في أن هذا هو سبب مشاكل أدائك.

إذا كنت ترغب في ربط الخيط بأسفل إلى قلب واحد (لست متأكدًا مما إذا كان يمكن ضمان ذلك) ، فقد ترغب في التحقق من System.Diagnostics.ProcessThread.ProcessorAffinity خاصية ، على الرغم من أنني لم أستخدمها بنفسي.

  • غير ممكن حقا في C#. حسنا ، لا توجد طريقة أعرفها. تحتاج إلى interop ، مع أنه يعمل.

  • هل تستخدم موضوعات متعددة؟ إذا لم يكن - HM - آسف - ليس كثيرًا يمكنك القيام به. تطبيقات واجهة المستخدم القياسية لا تستخدم النوى المتعددة على أي حال.

في الأساس ، تكون التطبيقات التي لا تستخدم مؤشرات الترابط (عناصر العمل استخدام المواضيع) بطبيعتها ذات الأساس الفردي على أي حال.

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