C#怎么比较dynamic和Dictionary性能
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,C#怎么比较dynamic和Dictionary性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。开发中需要传递变参,考虑使用 dyna
千家信息网最后更新 2026年10月31日C#怎么比较dynamic和Dictionary性能
C#怎么比较dynamic和Dictionary性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
开发中需要传递变参,考虑使用 dynamic 还是 Dictionary(准确地说是Dictionary
首先使用以下测试代码:
public void TestDynamic() { var e = CallDynamic(new { Value = 0 }); int v = e.Value; } public void TestDictionary() { var dict = new Dictionary(); dict["Value"] = 0; dict = CallDictionary(dict); int v = (int)dict["Value"]; } private dynamic CallDynamic(dynamic test) { int v = test.Value; v++; return new { Value = v }; } private Dictionary CallDictionary( Dictionary test) { int v = (int)test["Value"]; v++; var dict = new Dictionary(); dict["Value"] = v; return dict; } 分别比较运行 1次、10次、100次、1000次、1e4次、1e5次、1e6次 时间
结果:

其中dynamic列和dynamic2列的数据分别是:
在一次运行中执行一步测试 和 在一次运行中连续执行所有测试
分析测试过程和数据,得到以下结论:
1.dynamic***使用会产生一定的性能损耗
2.无论是否***使用,使用次数达到一定量级,dynamic性能一定优于Dictionary
3.一次运行中连续使用dynamic会显著拉低平均性能损耗
考虑到传递变参可能出现多个参数,以上测试不完全。
使用以下代码进行第二阶段实验:
public void InvokeDynamic() { var e = CallDynamic2( new { Value1 = 0, Value2 = 0L, Value3 = 0f, Value4 = 0.0, Value5 = "test" }); int v1 = e.Value1; long v2 = e.Value2; float v3 = e.Value3; double v4 = e.Value4; string v5 = e.Value5; } public void InvokeDictionary() { var dict = new Dictionary(); dict["Value1"] = 0; dict["Value2"] = 0L; dict["Value3"] = 0f; dict["Value4"] = 0.0; dict["Value5"] = "test"; dict = CallDictionary2(dict); int v1 = (int)dict["Value1"]; long v2 = (long)dict["Value2"]; float v3 = (float)dict["Value3"]; double v4 = (double)dict["Value4"]; string v5 = (string)dict["Value5"]; } private dynamic CallDynamic2(dynamic test) { int v1 = test.Value1; long v2 = test.Value2; float v3 = test.Value3; double v4 = test.Value4; string v5 = test.Value5; v1++; v2++; v3++; v4++; v5 += "test"; return new { Value1 = v1, Value2 = v2, Value3 = v3, Value4 = v4, Value5 = v5 }; } private Dictionary CallDictionary2( Dictionary test) { int v1 = (int)test["Value1"]; long v2 = (long)test["Value2"]; float v3 = (float)test["Value3"]; double v4 = (double)test["Value4"]; string v5 = (string)test["Value5"]; v1++; v2++; v3++; v4++; v5 += "test"; var dict = new Dictionary(); dict["Value1"] = v1; dict["Value2"] = v2; dict["Value3"] = v3; dict["Value4"] = v4; dict["Value5"] = v5; return dict; } 结果数据:
决定选择使用dynamic
有兄弟考虑可能Box损耗了性能导致Dictionary表现不佳,
专门做了第三阶段实验,对比dynamic和Dictionary
具体数据不贴了,结果是dynamic在100000量级快一倍
看完上述内容,你们掌握C#怎么比较dynamic和Dictionary性能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
性能
数据
测试
运行
结果
实验
损耗
C#
显著
代码
内容
方法
更多
量级
问题
阶段
选择
束手无策
为此
不大
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手冲咖啡和咖啡机区别
哈尔滨大商圈互联网科技有限公司
北京禾田雨橡互联网科技
睿民互联网科技
齐家互联网科技有限公司
互联网科技视频素材
人人互联网科技是培训
多迪互联网科技有限公司
滨湖区互联网智能科技产品供应
蓝色互联网科技
港股科技和互联网
昊天互联网科技有限公司
上海万顺科技互联网有限公司招聘
北京天晋互联网科技有限公司
科技信息时代互联网发展
第三届互联网大会安防黑科技
互联网科技创新创业项目
亚光科技低轨卫星互联网
互联网科技自媒体灵感
山东亿川互联网科技有限责任公司
国智互联网科技
科技类互联网
亿人帮互联网科技
互联网 科技服务平台
广州恒生互联网科技有限
华夏互联网科技业
996高科技互联网公司
互联网科技和医药行业
青岛互联网科技园
瑞安市蟠桃会互联网科技有限公司