我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C#怎么比较dynamic和Dictionary性能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C#怎么比较dynamic和Dictionary性能

C#怎么比较dynamic和Dictionary性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

开发中需要传递变参,考虑使用 dynamic 还是  Dictionary(准确地说是Dictionary<string,object>)。dynamic 的编码体验显著优于  Dictionary,如果性能差距不大的话,我会选择使用dynamic。搜索后没有找到类似对比数据,决定自行实验。

首先使用以下测试代码:

public void TestDynamic() {     var e = CallDynamic(new { Value = 0 });     int v = e.Value; }  public void TestDictionary() {     var dict = new Dictionary<string, object>();     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<string, object> CallDictionary(     Dictionary<string, object> test) {     int v = (int)test["Value"];     v++;     var dict = new Dictionary<string, object>();     dict["Value"] = v;     return dict; }

分别比较运行 1次、10次、100次、1000次、1e4次、1e5次、1e6次 时间
结果:

C#怎么比较dynamic和Dictionary性能

其中dynamic列和dynamic2列的数据分别是:

在一次运行中执行一步测试 和 在一次运行中连续执行所有测试

分析测试过程和数据,得到以下结论:

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<string, object>();     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<string, object> CallDictionary2(     Dictionary<string, object> 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<string, object>();     dict["Value1"] = v1;     dict["Value2"] = v2;     dict["Value3"] = v3;     dict["Value4"] = v4;     dict["Value5"] = v5;     return dict; }

结果数据:

C#怎么比较dynamic和Dictionary性能

决定选择使用dynamic

有兄弟考虑可能Box损耗了性能导致Dictionary表现不佳,
专门做了第三阶段实验,对比dynamic和Dictionary<string,long>

具体数据不贴了,结果是dynamic在100000量级快一倍

看完上述内容,你们掌握C#怎么比较dynamic和Dictionary性能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C#怎么比较dynamic和Dictionary性能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#怎么比较dynamic和Dictionary性能

C#怎么比较dynamic和Dictionary性能,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。开发中需要传递变参,考虑使用 dynamic 还是 Dictionary(准
2023-06-17

C#、Java和Python性能比较分析

本篇内容介绍了“C#、Java和Python性能比较分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实验这里使用三种语言进行矩阵乘法。 矩
2023-06-27

C,Java和Python之间的性能比较

在过去的两年中,我为C语言做了大量的实现工作。 我之所以选择C语言而不是其他语言,是因为人们普遍认为C代码比其他流行的编程语言(例如Java和Python)运行得更快。

C++ 函数左值和右值参数传递的性能比较

左值和右值参数传递的性能差异左值参数传递存在副本开销,降低性能,尤其是对于大型对象。右值参数传递避免副本开销,提升性能,尤适用于临时对象或字面量。C++ 函数左值和右值参数传递的性能比较在 C++ 中,函数参数传递可以采用左值或右值的方式
C++ 函数左值和右值参数传递的性能比较
2024-04-21

比较分析C语言乘方函数的实现方法和性能

C语言乘方函数的实现方法及性能比较分析引言:乘方运算在数学和计算机科学中是非常常见和重要的操作,它用来计算一个数的n次方。C语言作为一种广泛应用于系统级开发的编程语言,提供了多种方式来实现乘方运算函数。本文将分析三种常见的方法:暴力法、迭
比较分析C语言乘方函数的实现方法和性能
2024-02-25

Python中的列表和元组的性能比较和选择原则是什么?

Python中的列表和元组的性能比较和选择原则是什么?在Python中,列表和元组是两种常见的数据结构。它们都可以用来存储一组数据,但有一些重要的区别。本文将从性能角度比较列表和元组,并给出选择原则的建议。访问速度:在访问单个元素时,元组的
2023-10-22

Python中的字符串切割和拼接方法的性能比较和最佳实践是什么?

Python中的字符串切割和拼接方法的性能比较和最佳实践是什么?在Python编程中,字符串是一个重要的数据类型。在处理字符串时,我们经常需要对字符串进行切割和拼接操作。然而,不同的切割和拼接方法可能具有不同的性能表现。为了提高程序的效率,
2023-10-22

Python中的json和pickle在数据序列化和反序列化方面的优劣势和性能比较是什么?

Python中的json和pickle在数据序列化和反序列化方面的优劣势和性能比较序列化是指将数据结构或对象转换为可存储或传输的格式的过程,而反序列化是将已序列化的数据转换回原始对象的过程。Python提供了许多用于序列化和反序列化数据的库
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录