Text - File의 데이터를 Dictionary 개체에 저장하는 C# -Application이 있습니다. 저장할 데이터의 양은 다소 클 수 있으므로 항목을 삽입하는 데 많은 시간이 걸립니다. 사전에있는 많은 항목을 사용하면 사전에 대한 데이터를 저장하는 내부 배열 크기를 조정하기 때문에 더 악화 될 수 있습니다. 그래서 추가 될 항목의 양으로 사전을 초기화했지만 속도에는 영향을 미치지 않습니다. 내 테스트에서많은 양의 항목에 대한 Dictionary.Add의 런타임이 높습니다.
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 (...)의 평균 시간이 변경되지 않는다는 것을 알았습니다. 새 사전()을 사용하여 사전을 초기화 할 때와 같습니다. (각 Add에 대해 평균 약 0.256ms). 이것은 확실히 사전에있는 데이터의 양에 기인합니다 (나는 원하는 크기로 초기화했습니다). 처음 20k 항목의 경우 Add에 대한 평균 시간은 각 항목에 대해 0.03ms입니다.
추가 작업을 더 빠르게하는 방법에 대해 알고 싶습니다.
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
IdPair는 생성자가있는 struct입니다. 나는 내 질문에 그것을 더했다 – Aaginor