一直以来,我总是听到关于在字段较少时,使用结构将获得更佳的性能,我对此一直深信不已,今天因为需要写一个性能要求较高的程序,所以特地写一段测试程序来验证是不是真的正确。
我建立了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关键字对性能的提高微乎其微;
也就是说,觉得哪个好用就用哪个吧,性能差不多。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2007-03-15 火花:使用文件管理功能管理我的连接
2007-03-15 在 .NET 2.0 中享受 .NET 3.0的特性