سؤال

التكرارات المحتملة:
هو string.format كفاءة كقسمة
إخراج سلسلة C #: تنسيق أو concat؟

ما هو أولوية الأداء وما يجب أن يكون الشروط التي يجب أن تفضل كل مما يلي:

String.Format("{0}, {1}", city, state);

أو

city + ", " + state;

أو

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
هل كانت مفيدة؟

المحلول

  • سيقوم برنامج التحويل البرمجي بتحسين أكبر عدد ممكن من سلسلة Concat حيث يمكن ذلك، لذلك، على سبيل المثال، يتم تقسيم الأجزاء التي يتم تقسيمها فقط لأغراض استراحة الخط في سلسلة واحدة حرفية.
  • سوف تحصل على تسلسل مع المتغيرات في string.concat
  • يمكن أن يكون StringBuilder أسرع بكثير إذا كنت تفعل عدة (أكثر من 10 أو نحو ذلك أظن) "التعديلات" على سلسلة، لكنها تحمل بعض النفقات العامة لأنها تخصص مساحة أكبر مما تحتاجه في المخزن المؤقت وتغيير حجمها المخزن المؤقت الداخلي يحتاج إلى ذلك.

أنا شخصيا استخدم String.Format تقريبا طوال الوقت لسببين:

  • من الأسهل أيضا الحفاظ على سلسلة التنسيق من إعادة ترتيب مجموعة من المتغيرات.
  • يأخذ string.format iformatprovider التي يتم تمريرها إلى أي أنواع iformastable التي يتم تضمينها في السلسلة (مثل العداب) بحيث تحصل على تنسيق رقمي مناسب للثقافة المحددة والإجمالية لمزيد من التحكم في كيفية تنسيق القيم.

على سبيل المثال، نظرا لأن بعض الثقافات تستخدم فاصلة كشارة عشرية تريد التأكد من ذلك مع إما StringBuilder أو String.Format التي تحدد cultureinfo.invariantculature إذا كنت تريد التأكد من أن الأرقام تم تنسيقها الطريقة التي تنوي بها.

شيء آخرين يجب ملاحظته ...

  • يحتوي StringBuilder أيضا على وظيفة AppendFormat التي تمنحك مرونة String.Format دون الحاجة إلى المخزن المؤقت الثاني غير الضروري.
  • عند استخدام StransBuilder، تأكد من عدم هزيمة الغرض من خلال تسلسل المعلمات التي تمر بإلحاق. إنه سهل مهم.

نصائح أخرى

لا يوجد حد ذات صلة. ولكن على افتراض أن String.Format يستخدم داخليا Stringbuilder (يمكنك أن ترى ذلك باستخدام أداة العاكس)، باستخدام StringBuilder.Append يجب أن يكون أسرع.

تحرير: بالطبع أن استخدام المشغل "+" هو خيار الأسوأ لأنه ينشئ مثيل سلسلة جديد لكل سلسلة تقوم بسلسلة.

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