تكرار السؤال: …
الإجابة المختصرة
لأن كل عملية تعديل أو دمج (+) تنشئ كائناً نصياً جديداً تماماً في الـ Heap؛ ويستخدم StringBuilder للحلقات التكرارية وString.Create لتوليد النصوص ذات الحجم المعروف بصفر تخصيص.
الشرح
إذا دمجت نصوصاً داخل حلقة تكرارية لـ 1,000 عنصر بـ text += item، ستقوم بحجز 1,000 كائن نصي مؤقت في الـ Heap وسرعان ما تمتلئ الذاكرة. يستخدم StringBuilder لتجميع المقاطع في مصفوفة داخلية واحدة قابلة للتمدد. وفي الأداء الفائق (.NET Core+)، تتيح دالة string.Create(length, state, action) حجز مساحة النص النهائي مباشرة والكتابة في الـ Span الداخلي الخاص به بصفر كائنات مؤقتة.
مثال بالكود
// أداء فائق وسرعة قصوى لإنشاء النصوص دون مصفوفات مؤقتة
string id = string.Create(8, state, (span, s) => {
// تعبئة الـ span مباشرة
});أخطاء شائعة
- استخدام StringBuilder لدمج نصين أو ثلاثة نصوص بسيطة في سطر واحد؛ دمج السطور البسيطة بـ + يجمعه المترجم تلقائياً بكفاءة تفوق StringBuilder.