У меня есть C # -приложение, которое хранит данные из TextFile в объекте Dictionary. Объем хранимых данных может быть довольно большим, поэтому вставка записей занимает много времени. Со многими элементами в Словаре становится еще хуже из-за изменения размера внутреннего массива, в котором хранятся данные для Словаря.
Поэтому я инициализировал Словарь с количеством добавляемых элементов, но это не влияет на скорость.
Вот моя функция:
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;
}
В моих тестах я вставляю ~ 300 тыс. Предметов.
Я проверил время выполнения с помощью ANTS Performance Profiler и обнаружил, что среднее время для resultSet.Add (...) не изменяется, когда я инициализирую Словарь с необходимым размером. Это то же самое, что когда я инициализирую словарь новым Dictionary (); (в среднем около 0,256 мс для каждого добавления).
Это определенно вызвано количеством данных в словаре (хотя я инициализировал его с нужным размером). Для первых 20 тыс. Элементов среднее время добавления составляет 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.");
}
}