c#编程最佳实践:使用类还是结构体?
选择何时使用类,何时使用结构体
接受这样一个事实,即基本理解了c#中的结构体和类,或者至少理解了最喜欢的编程语言中的结构体和类(如果它们存在的话)。好吧,如果你在想“很久以前我学过结构体,但在日常编码生活中从未使用过它”,那么你就是那95%从未测量过类和结构体性能的开发人员中的一员。别担心;在写这篇文章之前,我也没有。
那么类呢?是的,我们时不时地在日常项目开发中实现一个类。
现在我的问题是“哪个更快,类还是结构体”?我猜你会想“从未测试过”。好的,我们来测试一下。看看下面的代码。
namespace BlogProject{ struct MyStructure { public string Name; public string Surname; } class MyClass { public string Name; public string Surname; } class Program { static void Main(string[] args) {
MyStructure[] objStruct = new MyStructure[1000]; MyClass[] objClass = new MyClass[1000];
Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1000; i++) { objStruct[i] = newMyStructure(); objStruct[i].Name = "Sourav"; objStruct[i].Surname = "Kayal"; } sw.Stop(); Console.WriteLine("For Structure:- " + sw.ElapsedTicks); sw.Restart();
for (int i = 0; i < 1000; i++) { objClass[i] = newMyClass(); objClass[i].Name = "Sourav"; objClass[i].Surname = "Kayal"; } sw.Stop(); Console.WriteLine("For Class:- " + sw.ElapsedTicks);
Console.ReadLine(); } }}
输出结果如下:
现在很明显,结构体要比类快得多。同样,我在发布模式下测试了这段代码,并获得了至少20个输出,以使程序达到稳定的位置。
现在最大的问题是“为什么结构体比类快?”
正如我们所知,结构体变量是值类型,值(或结构体变量)存储在一个位置。
类对象是引用类型。如果是对象类型,则创建引用,并将值存储在内存的其他位置。基本上,值存储在一个可管理的堆中,指针创建在堆栈中。以这种方式在内存中实现一个对象,通常要比结构体变量花费更多的时间。