一直以来,我总是听到关于在字段较少时,使用结构将获得更佳的性能,我对此一直深信不已,今天因为需要写一个性能要求较高的程序,所以特地写一段测试程序来验证是不是真的正确。
    我建立了1个结构以及2个类:

struct MyStruct
    {
        public int a;
        public string b;
    }
    class MyClass
    {
        public int a;
        public string b;
    }
    sealed class MyClassReadonly
    {
        public MyClassReadonly(int x, string y)
        {
            a = x;
            b = y;
        }
        public readonly int a;
        public readonly string b;
    }
 
     第3个类和第2个类的区别是:使用了readonly访问符,他也是被告知有益于提高性能。
     测试程序比较简单,测试对象的创建、赋值和访问。
     计算机环境是:Windows 7 旗舰版,Intel E5200 2.5G,2GB RAM。.net 4.0 Release编译。

class Program
    {
        static void Main(string[] args)
        {
            int count = 30000000;
            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            int x; string y;
            watch.Start();
            MyStruct a;
            for (int i = 0; i < count; i++)
            {
                a = new MyStruct();
                a.a = i;
                a.b = i.ToString();
                x = a.a;
                y = a.b;
            }
            watch.Stop();
            Console.WriteLine("Struct:{0}", watch.Elapsed);
            watch.Reset();
            watch.Start();
            MyClass b;
            for (int i = 0; i < count; i++)
            {
                b = new MyClass();
                b.a = i;
                b.b = i.ToString();
                x = b.a;
                y = b.b;
            }
            watch.Stop();
            Console.WriteLine("Class:{0}", watch.Elapsed);
            watch.Reset();
            watch.Start();
            MyClassReadonly c;
            for (int i = 0; i < count; i++)
            {
                c = new MyClassReadonly(i,i.ToString());
                x = c.a;
                y = c.b;
            }
            watch.Stop();
            Console.WriteLine("Readonly Class:{0}", watch.Elapsed);
            Console.Read();
        }
    }
 
     最终的测试结果如下:
Struct:00:00:04.7962253
Class:00:00:04.9951920
Readonly Class:00:00:05.1693143
 
     总结:
     1、结构的确比类快,但性能提高的微乎其微;
     2、多一个构造比默认的构造要慢,但影响微乎其微;
     3、readonly关键字对性能的提高微乎其微;
     也就是说,觉得哪个好用就用哪个吧,性能差不多。

Struct 和 Class 性能有差异吗?自己测试相关推荐

  1. 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?

    在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句.对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大. 我今天挑选了三个这样的案例和你分享.希望再遇到相似的问题时,你可以做 ...

  2. 18为什么这些 SQL 语句逻辑相同,性能却差异巨大?

    18| 为什么这些 SQL 语句逻辑相同,性能却差异巨大? 文章目录 18| 为什么这些 SQL 语句逻辑相同,性能却差异巨大? 案例一:条件字段函数操作 案例二:隐式类型转换 案例三:隐式字符编码转 ...

  3. linux 小包 性能,网络数据小包吞吐量测试与分析

    摘  要: 吞吐量是评价网络平台性能的重要指标,是网络用户关注的焦点,对于不同帧长的以太网数据包,网络平台的处理能力存在较大差异,主要体现在处理64B和128B小包数据时,吞吐量有明显的降低.针对这一 ...

  4. 压测瓶颈在mysql_MySQL的性能基线收集及压力测试

    建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...

  5. 项目性能优化之性能问题分析和压力测试

    项目性能优化之性能问题分析和压力测试 性能问题分析 为什么要性能优化 影响性能的关键要素 性能优化出发点 性能压力测试 什么是压力测试 压力测试的指标 常用压测工具 性能问题分析 为什么要性能优化 应 ...

  6. php mysql 压力测试_MySQL的性能基线收集及压力测试

    建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...

  7. 数据库MySQL的性能基线收集及压力测试

    建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...

  8. Linux 硬件响应性能检测工具 硬盘IO测试工具 iozone ioping fio dd

    ioping 读取测试(不会影响设备数据) 块设备测试1 yeqiang@yeqiang-PC:/media/yeqiang$ sudo ioping /dev/sdc -c 10 4 KiB < ...

  9. 电脑优化软件测试大乐,性能优化小结(转) - 乐呵呵测试天地 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    性能测试过程中最重要也是最有挑战的就是性能测试结果分析,测试结果的分析是需要很多经验的积累的,不断的实践不断总结,下面是我做过的几个项目整理下来的一些常用东东 1.性能测试执行过程中经常遇到的问题 在 ...

最新文章

  1. 不写一行代码,也能玩转Kaggle竞赛?
  2. 【转载】反向代理为何叫反向代理?
  3. caffe使用过程中遇到的问题和解决办法
  4. 利用 Enterprise Library 改善你的应用系统1
  5. C++ 连接数据库的入口和获取列数、数据
  6. vue-cli3+typescript+路由懒加载报错问题
  7. 5.1特辑 | 为什么显示有票你却抢不到?技术揭秘12306如何保证车票不超卖
  8. PHP-----文件系统的交互
  9. android studio计算机代码,Android Studio实现简易计算器
  10. 使用wps-excell画折线图
  11. 我的全栈之路-Java基础之Java企业级项目开发环境搭建
  12. 使用RedRocket方便的查看证券数据
  13. 基于解决sci和ei等外文思维顺序问题的辅助软件分析
  14. Java多线程--概述-转自Kyrie lrving
  15. struts2中表现层的数据展现(bean,list,iterator,format,etc)
  16. Sublime Text 3 简体中文汉化包使用方法
  17. 马普尔小姐探案集S02E03【熙阳岭的疑云】
  18. 使用Python画动态图像
  19. HorNet: Efficient High-Order Spatial Interactions with Recursive Gated Convolutions
  20. 推荐100首值得听的英文歌【ZT】

热门文章

  1. [k8s] 第二章 十分钟带你搭建k8s集群环境
  2. RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
  3. c纳秒级计时器_C++11 计时器!真香
  4. android 快速启动,《Android APP可以有的东西》之显示篇:快速启动App
  5. 基于ip地址的客户识别原理_使用 LVS 实现负载均衡原理及安装配置
  6. sar极化想干矩阵_用于PolSAR图像分类的极化卷积网络
  7. mysql负载均衡与同步_MySql数据库从同步负载均衡实时备份
  8. Java查询spark中生成的文件_java+spark-sql查询excel
  9. opencv java match_Java OpenCV-从knnMatch提取匹配项
  10. 让数值自增_第03期:列非空与自增