我有一个C#应用程序,可以将文本文件中的数据存储到字典对象中。要存储的数据量可能相当大,所以插入条目需要很长时间。如果字典中有许多项,则由于用于存储字典数据的内部数组的调整大小,情况会变得更糟。因此,我使用将添加的项数量初始化字典,但这对速度没有影响。
下面是我的函数:
在我的测试中,我插入了约300k个项目。我使用ANTS Performance Profiler检查运行时间,并发现当我用所需大小初始化字典时,resultSet.Add(...)的平均时间并没有改变。与我使用new Dictionary()初始化字典时相同(每个Add平均约为0.256毫秒)。这绝对是由于字典中的数据量引起的(尽管我已使用所需的大小初始化它)。对于前20k个项目,每个项目的添加平均时间为0.03毫秒。
有任何想法如何使添加操作更快吗?
提前感谢, Frank
这是我的IdPair-Struct:
下面是我的函数:
private Dictionary<IdPair, Edge> AddEdgesToExistingNodes(HashSet<NodeConnection> connections)
{
Dictionary<IdPair, Edge> resultSet = new Dictionary<IdPair, Edge>(connections.Count);
foreach (NodeConnection con in connections)
{
...
resultSet.Add(nodeIdPair, newEdge);
}
return resultSet;
}
在我的测试中,我插入了约300k个项目。我使用ANTS Performance Profiler检查运行时间,并发现当我用所需大小初始化字典时,resultSet.Add(...)的平均时间并没有改变。与我使用new Dictionary()初始化字典时相同(每个Add平均约为0.256毫秒)。这绝对是由于字典中的数据量引起的(尽管我已使用所需的大小初始化它)。对于前20k个项目,每个项目的添加平均时间为0.03毫秒。
有任何想法如何使添加操作更快吗?
提前感谢, Frank
这是我的IdPair-Struct:
public struct IdPair
{
public int id1;
public int id2;
public IdPair(int oneId, int anotherId)
{
if (oneId > anotherId)
{
id1 = anotherId;
id2 = oneId;
}
else if (anotherId > oneId)
{
id1 = oneId;
id2 = anotherId;
}
else
throw new ArgumentException("The two Ids of the IdPair can't have the same value.");
}
}
IdPair
类中重写了Equals
和GetHashCode
方法?如果是,你的GetHashCode
算法是否能生成良好分布的哈希值? - LukeH