سؤال

كيف يمكنك اكتشاف عدد المعالجات/النوى الفعلية في .net؟

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

المحلول

System.Environment.ProcessorCount

إرجاع عدد المعالجات المنطقية

http://msdn.microsoft.com/en-us/library/system.environment.processorcount.aspx

بالنسبة لحساب المعالج الفعلي، قد تحتاج على الأرجح إلى استخدام WMI - بيانات التعريف التالية مدعومة في XP/Win2k3 وما فوق (تم تمكين الوظيفة في SP قبل Vista/Win2k8).

Win32_ComputerSystem.NumberOfProcessors إرجاع العد المادي

Win32_ComputerSystem.NumberOfLogicalProcessors إرجاع منطقي (دوه!)

كن حذرًا من أن وحدات المعالجة المركزية HyperThreaded تبدو مماثلة لوحدات المعالجة المركزية متعددة النواة ولكن خصائص الأداء هي نفسها جداً مختلف.

للتحقق من وجود وحدات المعالجة المركزية التي تدعم HT، قم بفحص كل مثيل لـ Win32_Processor وقارن بين هاتين الخاصيتين.

Win32_Processor.NumberOfLogicalProcessors

Win32_Processor.NumberOfCores

في الأنظمة متعددة النواة، تكون هذه عادةً نفس القيمة.

كن أيضًا على دراية بالأنظمة التي قد تحتوي على عدة مجموعات المعالجات, والذي يتم رؤيته غالبًا على أجهزة الكمبيوتر التي تحتوي على عدد كبير من المعالجات.بشكل افتراضي سوف يستخدم .Net مجموعة المعالجات الأولى فقط - مما يعني أنه افتراضيًا، ستستخدم الخيوط وحدات المعالجة المركزية (CPUs) من مجموعة المعالجات الأولى فقط، و Environment.ProcessorCount سيُرجع فقط عدد وحدات المعالجة المركزية في هذه المجموعة.وفق إجابة أليستر ماو, ، يمكن تغيير هذا السلوك عن طريق تغيير app.config كما يلي:

<configuration>
   <runtime>
      <Thread_UseAllCpuGroups enabled="true"/>
      <GCCpuGroup enabled="true"/>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

نصائح أخرى

وعلى الرغم Environment.ProcessorCount وبالفعل تحصل على عدد من المعالجات الظاهرية في النظام، والتي قد لا تكون عدد المعالجات المتاحة للعملية الخاصة بك. أنا جلد حتى سريعة قليلا فئة ثابتة / الملكية للحصول على بالضبط ما يلي:

using System;
using System.Diagnostics;

/// <summary>
/// Provides a single property which gets the number of processor threads
/// available to the currently executing process.
/// </summary>
internal static class ProcessInfo
{
    /// <summary>
    /// Gets the number of processors.
    /// </summary>
    /// <value>The number of processors.</value>
    internal static uint NumberOfProcessorThreads
    {
        get
        {
            uint processAffinityMask;

            using (var currentProcess = Process.GetCurrentProcess())
            {
                processAffinityMask = (uint)currentProcess.ProcessorAffinity;
            }

            const uint BitsPerByte = 8;
            var loop = BitsPerByte * sizeof(uint);
            uint result = 0;

            while (--loop > 0)
            {
                result += processAffinityMask & 1;
                processAffinityMask >>= 1;
            }

            return (result == 0) ? 1 : result;
        }
    }
}

وEnvironment.ProcessorCount سوف تشمل أيضا أي معالجات hyperthreaded.

وليس هناك طريقة (على الأقل حتى من خلال ويندوز 2003) للتمييز المعالج hyperthreaded من واحد مع اثنين من النوى.

وهذا يختلف في الواقع لا بأس به استنادا إلى النظام الأساسي الهدف. والجواب Stephbu لجهد كبير على SP3 XP وأحدث.

إذا كنت تستهدف منصات القديمة، قد ترغب في التحقق من <لأ href = "http://www.atalasoft.com/cs/blogs/rickm/archive/2008/04/01/counting-processors-in الصافي-ث-إيجابيات وسلبيات من بين خمس سنوات مختلفة، methods.aspx "يختلط =" نوفولو noreferrer "> هذه المقالة . كتبت عليه حوالي نصف قبل عام، وذلك في أناقش عدة طرق مختلفة للقيام بذلك، فضلا عن إيجابيات وسلبيات الفردية لكل طريقة.

وأنت قد تحتاج أيضا إلى التحقق من هذا المقال مشروع قانون إذا يرغبون في تمييز النوى الظل من توازي من تلك الحقيقية.

وSystem.Environment.ProcessorCount هو ما تحتاجه

وEnvironment.ProcessorCount

وتحرير: تتوفر في NET 2.0، وليس في .NET Framework 1.1

لم يكن لديك ما يكفي من مندوب ليكي، ولكن لاحظ أنه بالإضافة إلى XPSP2، ويندوز 2003 SP1 Server و SP2 أيضا في حاجة إلى إصلاح عاجل لتمكين هذه الوظيفة:

http://support.microsoft.com/kb/932370

ويمكنك استخدام PowerShell لوصول معلومات المعالج شاملة. على سبيل المثال، يمكنك تشغيل الأمر التالي للحصول على عدد من النوى وحدة المعالجة المركزية:

Get-WmiObject -namespace root\CIMV2 -class Win32_Processor -Property NumberOfCores

وانه من الاسهل بكثير للبحث عن WMI عند استخدام نوع من أداة المستكشف. لذلك، ويمكنني أن أقترح استخدام أداة تصفح WMI (مثل WMIExplorer أو <أ href ل = "http://www.microsoft.com/en-us/download/details.aspx؟id=24045" يختلط = "نوفولو"> WMI CIM ستوديو ) لاستكشاف WMI الطبقات، والخصائص والأساليب.

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