dynamic和反射性能的简单比较

    技术2026-05-15  4

    今天比较没有事情,突然想做个关于dyanmic对象和使用反射的性能比较,所以就做了个简单的测试。

    第一中方法是传统的调用

    第二种方法是使用daynamic对象

    第三种方法是使用反射

     

    分别调用List<>的Add方法1000000次,看看每种方法耗用的时间。

     

    using System; using System.Collections.Generic; using System.Diagnostics; namespace ConsoleApplication2 { class Test { public string Name { get; set; } public int Aage { get; set; } } class Program { static void Main(string[] args) { var list = new List<Test>(); var sw = new Stopwatch(); sw.Start(); for (var i = 0; i < 1000000; i++) list.Add(new Test(){Name="Test",Aage=i}); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); var type = typeof(List<>); var gType = type.MakeGenericType(new Type[] { typeof(Test) }); dynamic dynamicObject = Activator.CreateInstance(gType); sw.Reset(); sw.Restart(); for (var i = 0; i < 1000000; i++) dynamicObject.Add(new Test() { Name = "Test", Aage = i }); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); var obj = Activator.CreateInstance(gType); var m = gType.GetMethod("Add"); sw.Reset(); sw.Restart(); for (var i = 0; i < 1000000; i++) m.Invoke(obj, new object[] { new Test() { Name = "Test", Aage = i } }); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds.ToString()); Console.ReadKey(); } } }  

     

    结果如下:

     

    结果显示,相对于传统的方法,使用dynamic要慢3倍,使用反射要慢30倍

     

    最新回复(0)