تحسين أداء .NET
1) تجنب استخدام ArrayList.
نظرًا لأن أي كائن يضاف إلى ArrayList يجب أن يتم وضعه في مربع كنوع System.Object، فعند استرداد البيانات من ArrayList، يجب إخراجه من الصندوق وإعادته إلى النوع الفعلي. يوصى باستخدام نوع مجموعة مخصص بدلاً من ArrayList. يوفر .net 2.0 نوعًا جديدًا يسمى النوع العام، وهو نوع قوي، ويمكن أن يؤدي استخدام المجموعات العامة إلى تجنب الملاكمة وإلغاء التغليف وتحسين الأداء.
2) استخدم HashTale بدلاً من أنواع مجموعات القاموس الأخرى (مثل StringDictionary وNameValueCollection وHybridCollection). يمكن استخدام HashTable عند تخزين كمية صغيرة من البيانات
3) قم بتعريف الثوابت لحاويات السلسلة، ولا تقم بتغليف الأحرف مباشرة بين علامات اقتباس مزدوجة ". ".
//يتجنب
//
MyObject obj = new MyObject();
نشط
";
سلسلة const C_STATUS = "ACTIVE"؛
MyObject obj = new MyObject();
obj.Status = C_STATUS؛
4) لا تستخدم الأحرف الكبيرة أو الأحرف الصغيرة لتحويل السلاسل للمقارنة. استخدم String.Compare بدلاً من ذلك، حيث يمكن تجاهل حالة الأحرف للمقارنة.
مثال:
سلسلة const C_VALUE = "مقارنة"؛
إذا (String.Compare(sVariable, C_VALUE, true) == 0)
{
Console.Write("نفسه");
}
5) استخدم StringBuilder بدلاً من استخدام حرف تسلسل السلسلة "+"،
//Avoid
String sXML = "
sXML += "
sXML += "البيانات";
sXML += "
sXML += "
;
StringBuilder sbXML = new StringBuilder();
sbXML.Append("
sbXML.Append("
sbXML.Append("البيانات");
sbXML.Append("
sbXML.Append("
6) إذا كنت تقرأ فقط من كائن XML، فتجنب استخدام XMLDocumentt، وبدلاً من ذلك استخدم XPathDocument، وهو للقراءة فقط وبالتالي يعمل على تحسين الأداء.
إذا كنت تقرأ البيانات من كائنات XML فقط، فاستخدم XPathDocument للقراءة فقط بدلاً من XMLDocument لتحسين الأداء.
//يتجنب
XmlDocument xmld = new XmlDocument();
xmld.LoadXml(sXML);
txtName.Text = xmld.SelectSingleNode("/packet/child").InnerText;
//
مستحسن
XPathDocument xmldContext = new XPathDocument(new StringReader(oContext.Value));
XPathNavigator xnav = xmldContext.CreateNavigator();
XPathNodeIterator xpNodeIter = xnav.Select("packet/child");
iCount = xpNodeIter.Count;
xpNodeIter = xnav.SelectDescendants(XPathNodeType.Element, false);
بينما (xpNodeIter.MoveNext())
{
sCurrValues += xpNodeIter.Current.Value+"~";
}
7) تجنب الإعلان عن المتغيرات في جسم الحلقة، قم بإعلان المتغيرات خارج الحلقة وقم بتهيئتها في جسم الحلقة.
//يتجنب
ل(int i=0;i<10;i++)
{
SomeClass objSC = new SomeClass();
.
.
.
}
//يوصي
SomeClass objSC = null;
ل(int i=0;i<10;i++)
{
objSC = new SomeClass();
.
.
.
}
8) احصل على الاستثناء المحدد ولا تستخدم System.Exception العام
//تجنب
يحاول
{
<بعض المنطق>
}
قبض (استثناء باستثناء)
{
<معالجة الأخطاء>
}
//يوصي
يحاول
{
<بعض المنطق>
}
قبض على (System.NullReferenceException باستثناء)
{
<معالجة الأخطاء>
}
قبض على (System.ArgumentOutOfRangeException باستثناء)
{
<معالجة الأخطاء>
}
قبض على (System.InvalidCastException باستثناء)
{
<معالجة الأخطاء>
}
9) عند استخدام Try...catch...أخيرًا، يجب تحرير الموارد المشغولة مثل الاتصالات وتدفقات الملفات وما إلى ذلك، وإلا فلن يتم تحرير الموارد المشغولة بعد اكتشاف خطأ في Catch.
يحاول
{
...
}
يمسك
{...}
أخيراً
{
اتصال.إغلاق ()
}
10) تجنب استخدام الاستدعاءات العودية والحلقات المتداخلة، حيث أن استخدامها سيؤثر بشكل خطير على الأداء. استخدمها فقط عند الحاجة إلى استخدامها.
11) استخدم استراتيجيات التخزين المؤقت المناسبة لتحسين الأداء لهذا اليوم، وسأكتب المزيد عندما يكون لدي الوقت.
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html