C#怎么比较dynamic和Dictionary性能
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,C#怎么比较dynamic和Dictionary性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。开发中需要传递变参,考虑使用 dyna
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
成绩管理系统数据库论文
简单的网络安全体系结构
rdp在线数据库
软件开发行业招聘培训
金蝶服务器维修多少钱一台
从数据库检索信息时发生错误
在服务器上卸载数据库
计算机网络技术课程认知
fm数据库怎么改
mysql数据库连表去重复
工业系统的网络安全
宽带上插了个服务器
杭州浩际网络技术公司
网络技术经济专业
保护儿童个人信息网络安全
全国作品登记数据库
落实网络安全工作要点要求
东软网络安全部门怎么样
大学学软件开发报什么专业
国内比较大的数据库厂商
顺义区专业性软件开发概况
数据库双查询and判断条件
福建服务器维修技术云空间
dynamo数据库联表查询
网络安全攻防演练比赛信息
猎杀对决服务器设置
ibm服务器灯亮黄灯
论述网络安全研究的内容是什么
软件开发为什么要申请著作权
数据库全文搜索