整数字典或引用键 - 性能?

时间:2014-04-10 06:27:55

标签: c# .net performance dictionary collections

我很想知道使用Dictionary值类型键和包含在引用类型(int)中的整数之间IntId读写性能的差异。

使用int进行实例化:

new Dictionary<int, SomeValue>();

使用IntId进行实例化:

new Dictionary<IntId, SomeValue>();

平均表现结果在撰写和阅读200,000项时产生以下结果:

  • IntId写作速度提高了2倍
  • int阅读速度提高了3倍

这两个结果之间的差异是什么?

IntId类:

public class IntId
{
    public int Value { get; private set; }

    public IntId(int value)
    {
        Value = value;
    }

    public override bool Equals(object other)
    {
        var entity = other as IntId;

        if (entity == null)
        {
            return false;
        }
        else
        {
            return (this.Value.Equals(entity.Value));
        }
    }

    public override int GetHashCode()
    {
        return Value.GetHashCode();
    }
}

1 个答案:

答案 0 :(得分:1)

这些结果之间的差异很可能与获得它们的方法密切相关。

您的IntId是一个小型参考对象。创建一个需要内存分配。

整数是一个值对象,但可能需要在您的集合中使用装箱。

分配给键的值会影响散列函数的效率。

有许多因素需要考虑。在仔细审查它们是如何获得之前,我不会接受面值的结果。