最近在看《編寫高質量程式碼改善C#程式的157個建議》。看到第15個建議的時候,結合平時使用的習慣發現有部分出入,沒有對不對的說法,只是使用習慣有點區別,跟隨著我們來看一看。
第15條建議是:使用dynamic簡化反射的使用。dynamic的確可以簡化反射的使用,但是從效能上來說是有條件的,大家可以根據自己情況選擇。
原書的案例如下:
static void Main(string[] args) { int times = 1; DynamicSample dynamicSample = new DynamicSample(); var addMethod = typeof(DynamicSample).GetMethod("Add"); Stopwatch watch1 = Stopwatch.StartNew(); int result = 0; for (int i = 0; i < times; i++) { result = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 }); } Console.WriteLine(string.Format("正常的反射耗時:{0}毫秒", watch1.ElapsedMilliseconds)); Console.WriteLine("正常反射的結果:" + result); /****************************************************************************************************/ dynamic dynamicSample2 = new DynamicSample(); int result2 = 0; Stopwatch watch2 = Stopwatch.StartNew(); for (int i = 0; i < times; i++) { result2 = dynamicSample2.Add(1, 2); } Console.WriteLine(string.Format("Dynamic的反射耗時:{0}毫秒", watch2.ElapsedMilliseconds)); Console.WriteLine("Dynamic反射的結果:" + result2); /****************************************************************************************************/ DynamicSample reflectSamplebetter = new DynamicSample(); var addMethod2 = typeof(DynamicSample).GetMethod("Add"); var delg = (Func<DynamicSample, int, int, int>)Delegate.CreateDelegate(typeof(Func<DynamicSample, int, int, int>), addMethod2); int result3 = 0; Stopwatch watch3 = Stopwatch.StartNew(); for (int i = 0; i < times; i++) { result3 = delg(reflectSamplebetter, 1, 2); } Console.WriteLine(string.Format("優化的反射耗時:{0}毫秒", watch3.ElapsedMilliseconds)); Console.WriteLine("優化的反射結果:" + result3); /****************************************************************************************************/ Console.Read(); } //測試實體類 public class DynamicSample { public string Name { get; set; } public int Add(int a, int b) { return a + b; } }
執行一次迴圈的結果如下:
本文來自部落格園,作者:熊澤-學習中的苦與樂,轉載請註明原文連結:https://www.cnblogs.com/xiongze520/p/17577982.html