C#:我的财产在一个结构中吗?如果是,为什么会变慢?

C#:我的财产在一个结构中吗?如果是,为什么会变慢?,c#,performance,struct,properties,value-type,C#,Performance,Struct,Properties,Value Type,我有一个定义如下的结构: public结构StringInt(string\u s,int\u i) { this.StringValue=\u s; this.IntegerValue=_i; } 公共字符串StringValue{get;private set;} 公共整数整型值{get;私有集;} 我已经将其中的10个放入了StringInt[]数组中,并在它们上面循环,试图找到一个具有特定字符串的对,然后返回结构的int。我这样做了一百万次。我希望访问StringValue和Integ

我有一个定义如下的结构:

public结构StringInt(string\u s,int\u i)
{
this.StringValue=\u s;
this.IntegerValue=_i;
}
公共字符串StringValue{get;private set;}
公共整数整型值{get;私有集;}
我已经将其中的10个放入了StringInt[]数组中,并在它们上面循环,试图找到一个具有特定字符串的对,然后返回结构的int。我这样做了一百万次。我希望访问StringValue和IntegerValue的速度相当快,但似乎不是这样。我在发布模式下进行了测试,没有附加调试程序,下面是我使用秒表实例的平均计时(以滴答为单位):

(这是查看不同访问器速度的测试代码-请注意,如果访问int或string属性,这些计时实际上是相同的。)

此方法执行100万次:

param: map = StringInt[10] with randomized values for each property.
target = string to match
{
    for (int index = 0; length = map.length; index < length; ++index)
    {
        StringInt pair = map[index];  // 27 ticks
        string key1 = map[index].StringValue; // 539 ticks
        string key2 = pair.StringValue; // 534 ticks -- just testing this
        if (string.Equals(key1,target, StringComparison.OrdinalIgnoreCase)) //115 ticks
    }

          return pair.IntegerValue;   // 530 ticks 
}
param:map=StringInt[10],每个属性都有随机值。
target=要匹配的字符串
{
对于(int index=0;length=map.length;index
从数组中获取StringInt很快,但是尝试访问一个非常简单的属性(我希望它是内联的,对吗?)要慢得多。拿到那根绳子会有一些开销吗?我认为可能是引用类型杀死了它,但是获取整数值也同样缓慢

我还对公共字段和支持属性的只读私有字段(无设置访问器)进行了尝试。几乎相同的精确结果


那么--这些时间花在哪里了?

如果你能提供一个using,这样我们就可以重排你看到的东西,那就太棒了。如果你想知道时间到底花在哪里了,那么就使用a。你确定
return-1
在循环中吗?因为如果它真的在那里,循环是无用的(它总是只运行一次迭代)?阅读mjwills&Jeroen Mostert-我将查看该软件包并重新尝试我的测试,谢谢,我从未听说过这一点,因为我所有的书都只显示秒表计时!dasblinkenlight-你是对的-在我们没有找到匹配项之后,return-1应该在循环之外-这就是我的代码,但老实说,我在格式化时遇到了困难。Zeohar Peled我还没有试过一门课,那是下一步好的尝试。我希望通过在一个非常特定的应用程序中使用一个值类型的结构,我可以做得比Dictionary.TryGet更好,但这让我感到非常震惊。