Struct 和 Class 性能有差异吗?自己测试
一直以来,我总是听到关于在字段较少时,使用结构将获得更佳的性能,我对此一直深信不已,今天因为需要写一个性能要求较高的程序,所以特地写一段测试程序来验证是不是真的正确。
我建立了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 性能有差异吗?自己测试相关推荐
- 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句.对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大. 我今天挑选了三个这样的案例和你分享.希望再遇到相似的问题时,你可以做 ...
- 18为什么这些 SQL 语句逻辑相同,性能却差异巨大?
18| 为什么这些 SQL 语句逻辑相同,性能却差异巨大? 文章目录 18| 为什么这些 SQL 语句逻辑相同,性能却差异巨大? 案例一:条件字段函数操作 案例二:隐式类型转换 案例三:隐式字符编码转 ...
- linux 小包 性能,网络数据小包吞吐量测试与分析
摘 要: 吞吐量是评价网络平台性能的重要指标,是网络用户关注的焦点,对于不同帧长的以太网数据包,网络平台的处理能力存在较大差异,主要体现在处理64B和128B小包数据时,吞吐量有明显的降低.针对这一 ...
- 压测瓶颈在mysql_MySQL的性能基线收集及压力测试
建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...
- 项目性能优化之性能问题分析和压力测试
项目性能优化之性能问题分析和压力测试 性能问题分析 为什么要性能优化 影响性能的关键要素 性能优化出发点 性能压力测试 什么是压力测试 压力测试的指标 常用压测工具 性能问题分析 为什么要性能优化 应 ...
- php mysql 压力测试_MySQL的性能基线收集及压力测试
建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...
- 数据库MySQL的性能基线收集及压力测试
建立基线的作用: 计算机科学中,基线是项目储存库中每个工件版本在特定时期的一个"快照". 比如我们现在有并发事物,那么在某时刻发起一个事物会产生当前数据的快照,那么这个快照就相当理 ...
- Linux 硬件响应性能检测工具 硬盘IO测试工具 iozone ioping fio dd
ioping 读取测试(不会影响设备数据) 块设备测试1 yeqiang@yeqiang-PC:/media/yeqiang$ sudo ioping /dev/sdc -c 10 4 KiB < ...
- 电脑优化软件测试大乐,性能优化小结(转) - 乐呵呵测试天地 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
性能测试过程中最重要也是最有挑战的就是性能测试结果分析,测试结果的分析是需要很多经验的积累的,不断的实践不断总结,下面是我做过的几个项目整理下来的一些常用东东 1.性能测试执行过程中经常遇到的问题 在 ...
最新文章
- 不写一行代码,也能玩转Kaggle竞赛?
- 【转载】反向代理为何叫反向代理?
- caffe使用过程中遇到的问题和解决办法
- 利用 Enterprise Library 改善你的应用系统1
- C++ 连接数据库的入口和获取列数、数据
- vue-cli3+typescript+路由懒加载报错问题
- 5.1特辑 | 为什么显示有票你却抢不到?技术揭秘12306如何保证车票不超卖
- PHP-----文件系统的交互
- android studio计算机代码,Android Studio实现简易计算器
- 使用wps-excell画折线图
- 我的全栈之路-Java基础之Java企业级项目开发环境搭建
- 使用RedRocket方便的查看证券数据
- 基于解决sci和ei等外文思维顺序问题的辅助软件分析
- Java多线程--概述-转自Kyrie lrving
- struts2中表现层的数据展现(bean,list,iterator,format,etc)
- Sublime Text 3 简体中文汉化包使用方法
- 马普尔小姐探案集S02E03【熙阳岭的疑云】
- 使用Python画动态图像
- HorNet: Efficient High-Order Spatial Interactions with Recursive Gated Convolutions
- 推荐100首值得听的英文歌【ZT】
热门文章
- [k8s] 第二章 十分钟带你搭建k8s集群环境
- RabbitMQ(九):RabbitMQ 延迟队列,消息延迟推送(Spring boot 版)
- c纳秒级计时器_C++11 计时器!真香
- android 快速启动,《Android APP可以有的东西》之显示篇:快速启动App
- 基于ip地址的客户识别原理_使用 LVS 实现负载均衡原理及安装配置
- sar极化想干矩阵_用于PolSAR图像分类的极化卷积网络
- mysql负载均衡与同步_MySql数据库从同步负载均衡实时备份
- Java查询spark中生成的文件_java+spark-sql查询excel
- opencv java match_Java OpenCV-从knnMatch提取匹配项
- 让数值自增_第03期:列非空与自增