ปรับประสิทธิภาพ .NET ให้เหมาะสม
1) หลีกเลี่ยงการใช้ ArrayList
เนื่องจากออบเจ็กต์ใดๆ ที่เพิ่มลงใน ArrayList จะต้องถูกบรรจุอยู่ในกล่องประเภท System.Object เมื่อดึงข้อมูลจาก ArrayList จะต้องยกเลิกการบรรจุกลับเป็นประเภทจริง ขอแนะนำให้ใช้ประเภทคอลเลกชันที่กำหนดเองแทน ArrayList .net 2.0 นำเสนอประเภทใหม่ที่เรียกว่า generics ซึ่งเป็นประเภทที่แข็งแกร่ง การใช้คอลเลกชันทั่วไปสามารถหลีกเลี่ยงการชกมวยและแกะกล่องและปรับปรุงประสิทธิภาพได้
2) ใช้ HashTale แทนคอลเลกชันพจนานุกรมอื่นๆ (เช่น StringDictionary, NameValueCollection, HybridCollection) สามารถใช้ HashTable เมื่อจัดเก็บข้อมูลจำนวนเล็กน้อย
3) ประกาศค่าคงที่สำหรับคอนเทนเนอร์สตริง และอย่าห่อหุ้มอักขระโดยตรงด้วยเครื่องหมายคำพูดคู่ " ".
//หลีกเลี่ยง
-
MyObject obj = ใหม่ MyObject();
obj.Status = "ใช้งานอยู่";
//แนะนำ
สตริง const C_STATUS = "ใช้งานอยู่";
MyObject obj = ใหม่ MyObject();
obj.Status = C_STATUS;
4) อย่าใช้ตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็กเพื่อแปลงสตริงสำหรับการเปรียบเทียบ ใช้ String.Compare แทน ซึ่งสามารถละเว้นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับการเปรียบเทียบ
ตัวอย่าง:
สตริง const C_VALUE = "เปรียบเทียบ";
ถ้า (String.Compare(sVariable, C_VALUE, true) == 0)
-
Console.Write("เหมือนกัน");
-
5) ใช้ StringBuilder แทนการใช้อักขระต่อสตริง "+", .
//Avoid
สตริง sXML = "<พาเรนต์>";
sXML += "<เด็ก>";
sXML += "ข้อมูล";
sXML += "</ลูก>";
sXML += "</parent>";
//แนะนำ
StringBuilder sbXML = StringBuilder ใหม่();
sbXML.Append("<ผู้ปกครอง>");
sbXML.Append("<ลูก>");
sbXML.ผนวก("ข้อมูล");
sbXML.ผนวก("</child>");
sbXML.Append("</parent>");
6) หากคุณกำลังอ่านจากวัตถุ XML เท่านั้น ให้หลีกเลี่ยงการใช้ XMLDocumentt ให้ใช้ XPathDocument แทน ซึ่งจะเป็นแบบอ่านอย่างเดียวและปรับปรุงประสิทธิภาพ
หากคุณอ่านเฉพาะข้อมูลจากออบเจ็กต์ XML ให้ใช้ XPathDocument แบบอ่านอย่างเดียวแทน XMLDocument เพื่อปรับปรุงประสิทธิภาพ
//หลีกเลี่ยง
XmlDocument xmld = XmlDocument ใหม่();
xmld.LoadXml(sXML);
txtName.Text = xmld.SelectSingleNode("/packet/child").InnerText;
//
แนะนำ
XPathDocument xmldContext = XPathDocument ใหม่ (StringReader ใหม่ (oContext.Value));
XPathNavigator xnav = xmldContext.CreateNavigator();
XPathNodeIterator xpNodeIter = xnav.Select("แพ็กเก็ต/ลูก");
iCount = xpNodeIter.Count;
xpNodeIter = xnav.SelectDescendants (XPathNodeType.Element, เท็จ);
ในขณะที่(xpNodeIter.MoveNext())
-
sCurrValues += xpNodeIter.Current.Value+"~";
-
7) หลีกเลี่ยงการประกาศตัวแปรในส่วนเนื้อหาของลูป
//หลีกเลี่ยง
สำหรับ(int i=0; i<10; i++)
-
SomeClass objSC = ใหม่ SomeClass();
-
-
.
}
//แนะนำ
SomeClass objSC = null;
สำหรับ(int i=0; i<10; i++)
-
objSC = SomeClass ใหม่ ();
-
-
-
}
8) จับข้อยกเว้นที่ระบุ ห้ามใช้ System.Exception ทั่วไป
//หลีกเลี่ยง
พยายาม
-
<ตรรกะบางอย่าง>
-
จับ (ข้อยกเว้นยกเว้น)
-
<การจัดการข้อผิดพลาด>
-
//แนะนำ
พยายาม
-
<ตรรกะบางอย่าง>
-
จับ (System.NullReferenceException exc)
-
<การจัดการข้อผิดพลาด>
-
จับ (System.ArgumentOutOfRangeException exc)
-
<การจัดการข้อผิดพลาด>
-
จับ (System.InvalidCastException exc)
-
<การจัดการข้อผิดพลาด>
}
9) เมื่อใช้ Try...catch...ในที่สุด ทรัพยากรที่ถูกครอบครอง เช่น การเชื่อมต่อ สตรีมไฟล์ ฯลฯ จะต้องถูกปล่อยออกมาในที่สุด มิฉะนั้น ทรัพยากรที่ถูกครอบครองจะไม่สามารถถูกปล่อยออกมาได้หลังจากตรวจพบข้อผิดพลาดใน Catch
พยายาม
-
-
-
จับ
-
ในที่สุด
-
การเชื่อมต่อ.ปิด()
-
10) หลีกเลี่ยงการใช้การโทรแบบเรียกซ้ำและการวนซ้ำแบบซ้อน การใช้สิ่งเหล่านี้จะส่งผลต่อประสิทธิภาพอย่างจริงจังเท่านั้น
11) ใช้กลยุทธ์การแคชที่เหมาะสมเพื่อปรับปรุงประสิทธิภาพ เพียงเท่านี้ วันนี้ฉันจะเขียนเพิ่มเติมเมื่อฉันมีเวลา
http://www.cnblogs.com/timone/archive/2006/11/17/563965.html