كيفية تحسين أداء سلسلة السلسلة في Visual C#

للحصول على إصدار Microsoft Visual JScript.NET من هذه المقالة، راجع 306823 .

للحصول على إصدار Microsoft Visual Basic.NET من هذه المقالة، راجع 306821 .


تشير هذه المقالة إلى مساحة الاسم Microsoft.NET Framework مكتبة الفئة التالية:
  • System.Text

في هذه المهمة

ملخص

يوضح هذا المقال خطوة بخطوة فوائد استخدام الفئة StringBuilder عبر تقنيات سلسلة التقليدية. السلاسل في.NET Framework ثابتة (أي النص المشار إليه للقراءة فقط بعد التوزيع الأولى). وهذا يوفر العديد من مزايا الأداء ويشكل بعض التحديات للمطور الذي كان معتاداً على تقنيات المعالجة سلسلة C/c + +.

العودة إلى أعلى

وصف السلاسل في.NET Framework

أسلوب واحد لتحسين سلسلة عبر strcat() في Visual C/c + + تخصيص مجموعة كبيرة من أحرف كمخزن مؤقت ونسخ سلسلة البيانات في المخزن المؤقت. في.NET Framework، سلسلة غير قابل للتغيير؛ لا يمكن تعديل في المكان. C # + سلسلة عامل إنشاء سلسلة جديدة ويؤدي إلى خفض أداء عندما كان يسلسل كميات كبيرة من النصوص.

ومع ذلك،.NET Framework يتضمن فئة StringBuilder محسن لسلسلة. يوفر نفس فوائد استخدام مصفوفة أحرف في C/c + +، بالإضافة إلى زيادة حجم المخزن المؤقت تلقائياً (عند الحاجة) وتتبع الطول لك. يوضح استخدام الفئة StringBuilder تطبيق نموذج في هذه المقالة ومقارنة الأداء إلى سلسلة.



العودة إلى أعلى

بناء وتشغيل تطبيق العرض التوضيحي

  1. تشغيل Visual Studio ثم قم بإنشاء تطبيق Visual C# "وحدة تحكم" جديدة.
  2. تستخدم التعليمة البرمجية التالية + = عامل تشغيل السلسلة والفئة ل StringBuilder للوقت 5000 تسلسل من الأحرف 30. إضافة هذه التعليمة البرمجية للإجراء الرئيسي.
    const int sLen=30, Loops=5000;DateTime sTime, eTime;
    int i;
    string sSource = new String('X', sLen);
    string sDest = "";
    //
    // Time string concatenation.
    //
    sTime = DateTime.Now;
    for(i=0;i<Loops;i++) sDest += sSource;
    eTime = DateTime.Now;
    Console.WriteLine("Concatenation took " + (eTime - sTime).TotalSeconds + " seconds.");
    //
    // Time StringBuilder.
    //
    sTime = DateTime.Now;
    System.Text.StringBuilder sb = new System.Text.StringBuilder((int)(sLen * Loops * 1.1));
    for(i=0;i<Loops;i++) sb.Append(sSource);
    sDest = sb.ToString();
    eTime = DateTime.Now;
    Console.WriteLine("String Builder took " + (eTime - sTime).TotalSeconds + " seconds.");
    //
    // Make the console window stay open
    // so that you can see the results when running from the IDE.
    //
    Console.WriteLine();
    Console.Write("Press Enter to finish ... ");
    Console.Read();

  3. حفظ التطبيق. اضغط F5 لترجمة وتشغيل التطبيق. يجب عرض إطارات وحدة التحكم إخراج مشابه لما يلي:
    اتخذت سلسلة 6.208928 ثانية.

    منشئ سلسلة أحرف استغرقت 0 ثانية.



    اضغط ENTER لإنهاء...
  4. اضغط ENTER لإيقاف تشغيل التطبيق وإغلاق نافذة وحدة التحكم.
العودة إلى أعلى

استكشاف الأخطاء وإصلاحها

  • إذا كنت في بيئة يدعم دفق البيانات، كما في نموذج ويب ASPX أو التطبيق الخاص بك بكتابة البيانات القرص وحاول تجنب الزائد المخزن المؤقت ل StringBuilderأو تسلسل كتابة البيانات مباشرة إلى الدفق من خلال أسلوب استجابة أو الأسلوب المناسب للدفق المطلوب.
  • حاول إعادة استخدام فئة StringBuilder موجودة بدلاً من إعادة تخصيص كل مرة تحتاج إلى واحد. هذا يحد من كومة الذاكرة المؤقتة النمو وتقليل مجموعة البيانات المهملة. وفي كلتا الحالتين، استخدام الفئة StringBuilder يجعل استخدام أكثر كفاءة لكومة الذاكرة المؤقتة من استخدام عامل التشغيل +.
العودة إلى أعلى

المراجع

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

العودة إلى أعلى
خصائص

رقم الموضوع: 306822 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 2

تعليقات