تحليل أداء كود C#: إيجاد نقاط الاختناق عمليًا

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يعتبر تحليل الأداء أمرًا لا غنى عنه لمطور C#

واجه كل مطور موقفًا: الكود يعمل، لكنه بطيء. أين تبحث عن المشكلة؟ غالبًا ما تكون التخمينات البديهية مضللة. هنا يأتي دور تحليل أداء كود C# - نهج منهجي لتحديد نقاط الاختناق في الأداء.

على عكس قياس الوقت البسيط باستخدام Stopwatch، يتيح التحليل الاحترافي فهم ليس فقط ما يبطئ، ولكن أيضًا لماذا. في هذه المقالة، سنستعرض الأدوات والأساليب العملية لمطوري .NET: من الأدوات المدمجة في Visual Studio إلى أدوات التحليل المتخصصة.



متى تحتاج إلى تحليل الأداء؟

  • عندما يعمل التطبيق بشكل أبطأ من المتوقع
  • عند ملاحظة مشاكل في الذاكرة (تسربات، ضغط GC مرتفع)
  • عند الحاجة لتحسين جزء حاسم من الكود قبل الإصدار
  • عند وجود حمل مرتفع على وحدة المعالجة المركزية أو الإدخال/الإخراج


1. إعداد البيئة والأدوات الأساسية

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



public class DataProcessor{    private List<int> _data;

public DataProcessor() { _data = Enumerable.Range(0, 1000000).ToList(); }

public double CalculateAverage() { double sum = 0; foreach (var item in _data) { sum += item; } return sum / _data.Count; }

public List<int> FilterEvenNumbers() { var result = new List<int>(); foreach (var item in _data) { if (item % 2 == 0) result.Add(item); } return result; }}


محلل الأداء المدمج في Visual Studio (Diagnostic Tools)

أسرع طريقة للبدء هي استخدام Diagnostic Tools في Visual Studio. قم بتشغيل التطبيق مع التصحيح (F5) وافتح نافذة "أدوات التشخيص" (Debug > Windows > Show Diagnostic Tools).

  • علامة التبويب CPU Usage - تُظهر أي الطرق تستهلك معظم وقت المعالج
  • علامة التبويب Memory Usage - تتبع تخصيص الذاكرة وجمع القمامة
  • علامة التبويب Events - تُظهر الاستثناءات وتحميل الوحدات

للتحليل الدقيق، استخدم Performance Profiler (Debug > Performance Profiler). اختر "CPU Usage" و"Instrumentation" - سيعطيك هذا معلومات مفصلة عن كل استدعاء.



2. تحليل أداء وحدة المعالجة المركزية وإيجاد نقاط الاختناق

لننظر إلى مثال حقيقي. لنفترض أن الطريقة FilterEvenNumbers تُستدعى في حلقة 1000 مرة. دعنا نقيس الأداء باستخدام BenchmarkDotNet - المعيار الذهبي لاختبارات الأداء في .NET.



تثبيت وإعداد BenchmarkDotNet

// قم بتثبيت الحزمة عبر NuGet: dotnet add package BenchmarkDotNet

using BenchmarkDotNet.Attributes;using BenchmarkDotNet.Running;

public class DataProcessorBenchmark{ private DataProcessor _processor;

[GlobalSetup] public void Setup() { _processor = new DataProcessor(); }

[Benchmark] public double TestCalculateAverage() => _processor.CalculateAverage();

[Benchmark] public List<int> TestFilterEvenNumbers() => _processor.FilterEvenNumbers();}

class Program{ static void Main(string[] args) { var summary = BenchmarkRunner.Run<DataProcessorBenchmark>(); }}

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



تحليل النتائج

لنفترض أن TestFilterEvenNumber

المدونات

توصيات الكتب