1. تجنب إجراءات التهيئة المتغيرة التي لا معنى لها
يضمن CLR تهيئة كافة الكائنات قبل الوصول إليها عن طريق تصفية الذاكرة المخصصة. لذلك، ليست هناك حاجة لإعادة تهيئة المتغيرات إلى 0 أو false أو null.
// خبير بشكل عام 10 عناصر أو أقل
Private HashTable _items = null;
Private NameValueCollection = _queryString = null;
سلسلة خاصة _siteUrl = فارغة؛
Uri الخاص _currentUri؛
string roleCacheKey = null;
نوع مصادقة السلسلة = "النماذج"؛
bool _isUrlRewriter = false;
string _rawUrl = null;
HttpContext _httpContext = null
DateTime requestStarTime = DateTime.Now;
تجدر الإشارة إلى أن المتغيرات المحلية في الطريقة لا يتم تخصيصها من الكومة ولكن من المكدس، لذلك لن تقوم C# بمسحها. إذا تم استخدام متغير محلي غير معين، فسيحدث إنذار أثناء الترجمة. لا تقم بتعيين قيم لمتغيرات الأعضاء من جميع الفئات فقط لأن آليات الاثنين مختلفة تمامًا!
2. نوع القيمة والنوع المرجعي
(1). تمرير معلمات نوع القيمة حسب المرجع.
يتم تخصيص أنواع القيم من مكدس الاستدعاءات ويتم تخصيص أنواع المراجع من الكومة المُدارة. عند استخدام نوع القيمة كمعلمة أسلوب، يتم إجراء نسخ قيمة المعلمة بشكل افتراضي، مما ينفي ميزة الكفاءة لتخصيص نوع القيمة. كأسلوب أساسي، يمكن أن يؤدي تمرير معلمات نوع القيمة حسب المرجع إلى تحسين الأداء.
الفراغ الخاص UseDateByRef(ref DateTime dt){ }
الفراغ العام foo()
{
DateTime الآن = DateTime.Now;
UseDateByRef(ref now);
}
(2)، توفير طريقة يساوي لنوع القيمة
تستخدم طريقة ValueType.Equals التي ينفذها .net بشكل افتراضي تقنية الانعكاس وتعتمد على الانعكاس للحصول على قيم جميع متغيرات الأعضاء للمقارنة، وهذا غير فعال للغاية. إذا كان سيتم استخدام أسلوب Equals لكائن القيمة الذي نكتبه (على سبيل المثال، وضع كائن القيمة في HashTable)، فيجب تحميل أسلوب Equals بشكل زائد.
مستطيل الهيكل العام
{
الطول المزدوج العام؛
العرض المزدوج العام؛
منطقي التجاوز العام يساوي (object ob)
{
إذا (ob هو مستطيل)
إرجاع المعادلات ((المستطيل)ob))
آخر
العودة كاذبة.
}
المنطق الخاص يساوي (المستطيل)
{
إرجاع هذا .Length == rect.Length && this .Breadth == rect.Breach;
}
}
(3) تجنب التعبئة والفك
يمكن لـ C# التحويل تلقائيًا بين أنواع القيم وأنواع المراجع من خلال الملاكمة والفتح. يتطلب الملاكمة تخصيص كائنات من الكومة ونسخ القيم، الأمر الذي له تكلفة أداء معينة. إذا حدثت هذه العملية في حلقة أو تم استدعاؤها بشكل متكرر كطريقة أساسية، فيجب أن تكون حذرًا من التأثير التراكمي.
ينشأ موقف شائع عند العمل مع أنواع المجموعات. على سبيل المثال:
ArrayList al = new ArrayList();
من أجل (int i = 0؛ i <1000؛ i ++)
{
al.Add(i); // محاصر ضمنيًا لأن Add() تأخذ كائنًا
}
int f = ( int )al[ 0 ];
الحل لهذه المشكلة هو استخدام نوع المجموعة العام الذي يدعمه .net2.0.