struct vs class性能测试

时间:2015-02-16 18:37:47

标签: c# performance class struct

我构建了一个测试并获得了以下结果:

  

分配类:15.3260622,分配结构:14.7216018。

在分配结构而不是类时看起来有4%的优势。这很酷但是真的足以添加语言值类型吗?在哪里可以找到一个显示结构真正击败类的例子?

void Main()
{
    var stopWatch = new System.Diagnostics.Stopwatch();

    stopWatch.Start();

    for (int i = 0; i < 100000000; i++)
    {
        var foo = new refFoo()
        {
            Str = "Alex" + i
        };
    }

    stopWatch.Stop();

    stopWatch.Dump();

    stopWatch.Restart();

    for (int i = 0; i < 100000000; i++)
    {
        var foo = new valFoo()
        {
            Str = "Alex" + i
        };
    }

    stopWatch.Stop();

    stopWatch.Dump();


}

public struct valFoo
{
    public string Str;
}

public class refFoo
{
    public string Str;
}

2 个答案:

答案 0 :(得分:6)

你的方法是错误的。您主要测量字符串分配,整数到字符串的转换以及字符串的连接。这个基准是不值得写的。

为了看到结构的好处,比较分配1000个对象的数组和1000个结构的数组。对于数组对象,您需要为数组本身分配一个,然后为数组中的每个对象分配一个。对于结构数组,您可以为结构数组分配一个。

另外,请查看.Net集合的C#源代码中List类的Enumerator的实现。它被声明为结构。那是因为它只包含一个int,所以整个枚举器结构都适合机器字,因此非常便宜。

答案 1 :(得分:-4)

尝试一些更简单的测试:

int size = 1000000;
var listA = new List<int>(size);
for (int i = 0; i < size; i++)
    listA.Add(i);

var listB = new List<object>(size);
for (int i = 0; i < size; i++)
    listB.Add(i);

要在第一种情况下存储1000000个整数,系统将分配4000000个字节。第二,如果我没有弄错 - 大约12000000字节。而且我怀疑性能差异会大得多。