الحصول على الحرف n في Swift: كيف لا تقلل الأداء

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

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

ابدأ الدورة

تحليل أداء كود C#: العثور على الاختناقات في الممارسة العملية

\n

يعد تحسين الأداء أحد المهام الأساسية للمطور. حتى أجمل كود يمكن أن يعمل ببطء إذا كان به اختناقات. في هذه المقالة، سننظر في كيفية تحليل أداء كود C# في بيئة .NET، والعثور على المناطق المشكلة، والقضاء عليها. ستتعرف على أدوات عملية مثل BenchmarkDotNet و dotMemory و Stopwatch المدمج، وستحصل أيضًا على أمثلة جاهزة للتحليل.

\n\n

لماذا يعتبر تحليل الأداء مهمًا؟

\n

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

\n\n

1. تحليل الأداء باستخدام Stopwatch (بداية سريعة)

\n

أبسط طريقة لقياس وقت تنفيذ الكود هي استخدام الفئة System.Diagnostics.Stopwatch. إنها مناسبة للتقييم الأولي، ولكن ليس للمعايير الدقيقة بسبب تأثير ترجمة JIT والعمليات الخلفية.

\n\n

مثال على استخدام Stopwatch

\n
using System.Diagnostics;\n\npublic class Example\n{\n    public void Run()\n    {\n        Stopwatch sw = Stopwatch.StartNew();\n\n        // Code to measure\n        SimulateWork();\n\n        sw.Stop();\n        Console.WriteLine($"Execution time: {sw.ElapsedMilliseconds} ms");\n    }\n\n    private void SimulateWork()\n    {\n        for (int i = 0; i < 1_000_000; i++)\n        {\n            // Simulating work\n        }\n    }\n}
\n

العيوب: لا يأخذ Stopwatch في الاعتبار إحماء JIT، أو جمع القمامة، أو عوامل أخرى. للتحليل الجاد، استخدم المكتبات المتخصصة.

\n\n

2. تحليل الأداء الاحترافي باستخدام BenchmarkDotNet

\n

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

\n
dotnet add package BenchmarkDotNet
\n\n

مثال على معيار مقارنة بين طريقتين

\n
using BenchmarkDotNet.Attributes;\nusing BenchmarkDotNet.Running;\n\npublic class StringBenchmark\n{\n    private string[] data = { "apple", "banana", "cherry", "date" };\n\n    [Benchmark]\n    public string ConcatWithPlus()\n    {\n        string result = "";\n        foreach (var s in data)\n            result += s;\n        return result;\n    }\n\n    [Benchmark]\n    public string ConcatWithStringBuilder()\n    {\n        var sb = new System.Text.StringBuilder();\n        foreach (var s in data)\n            sb.Append(s);\n        return sb.ToString();\n    }\n}\n\npublic class Program\n{\n    public static void Main()\n    {\n        var summary = BenchmarkRunner.Run<StringBenchmark>();\n    }\n}
\n

بعد التشغيل، سترى جدولاً بالوقت وتخصيصات الذاكرة والأخطاء. يتيح لك هذا المقارنة الموضوعية بين StringBuilder والتسلسل باستخدام +.

\n\n

3. تحليل الذاكرة باستخدام dotMemory وأدوات تشخيص Visual Studio

\n

يمكن أن تحدث الاختناقات ليس فقط في السرعة ولكن أيضًا في استهلاك الذاكرة. تساعد أداة dotMemory من JetBrains وأدوات Visual Studio المدمجة (Diagnostic Tools) في العثور على التسريبات والتخصيصات المتكررة والكائنات التي تعيش طويلاً في الكومة.

\n\n

كيفية استخدام أدوات تشخيص Visual Studio

\n
    \n
  • قم بتشغيل التطبيق في وضع Debug.
  • \n
  • افتح نافذة Diagnostic Tools (Debug → Windows → Show Diagnostic Tools).
  • \n
  • قم بتمكين تحليل الذاكرة (Memory Usage) أو تحليل وحدة المعالجة المركزية (CPU Usage).
  • \n
  • خذ لقطة للذاكرة (Snapshot) قبل وبعد تنفيذ الكود.

المدونات

توصيات الكتب