DA0012:大量的反射
規則 ID |
DA0012 |
分類 |
.NET Framework 使用 |
程式碼剖析方法 |
取樣 |
訊息 |
您可能在過度使用反映。 這是非常耗費資源的作業。 |
規則型別 |
警告 |
原因
對 System.Reflection 方法 (例如 InvokeMember 和 GetMember) 或對 Type 方法 (例如 MemberInvoke) 的呼叫佔程式碼剖析資料顯著的比例。 請盡可能考慮用相依組件之方法的早期繫結來取代這些方法。
規則描述
反映是 .NET Framework 的彈性功能,可用來執行應用程式至相依之執行階段組件的晚期繫結,或是在執行階段期間建立新的型別並以動態方式執行這些型別。 不過,如果經常使用這些技巧,或是在緊密迴圈中呼叫它們,就會降低效能。
如需詳細資訊,請參閱 MSDN 上 Microsoft Patterns and Practices 文件庫中「改進 .NET 應用程式效能和延展性」一卷之「第 5 章 - 改進 Managed 程式碼效能」的反映和晚期繫結 (英文) 一節。
如何調查警告
按兩下 [錯誤清單] 視窗中的訊息,即可巡覽至程式碼剖析資料的函式詳細資料檢視。 檢查 System.Type 或 System.Reflection 方法的呼叫函式,以找出最常使用 .NET Reflection API 之程式的區段。 請避免使用傳回中繼資料的方法。 當應用程式的效能極為重要時,您可能需要避免使用晚期繫結,並在執行階段動態地建立型別。