Tôi có C# -Ứng dụng lưu trữ dữ liệu từ một TextFile trong một đối tượng từ điển. Số lượng dữ liệu được lưu trữ có thể khá lớn, vì vậy phải mất rất nhiều thời gian chèn các mục nhập. Với nhiều mục trong từ điển nó thậm chí còn tồi tệ hơn, vì việc thay đổi kích thước của mảng nội bộ, lưu trữ dữ liệu cho từ điển. Vì vậy, tôi đã khởi tạo từ điển với số lượng các mục sẽ được thêm vào, nhưng điều này không ảnh hưởng đến tốc độ.Thời gian chạy cao cho từ điển.Thêm một số lượng lớn các mục
Đây là chức năng của tôi:
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;
}
Trong các thử nghiệm của tôi, tôi chèn ~ 300k các mặt hàng. Tôi đã kiểm tra thời gian chạy với ANTS Performance Profiler và thấy rằng thời gian trung bình cho resultSet.Add (...) không thay đổi khi tôi khởi tạo từ điển với kích thước cần thiết. Nó giống như khi tôi khởi tạo từ điển với từ điển mới(); (trung bình khoảng 0.256 ms cho mỗi Add). Điều này chắc chắn là do số lượng dữ liệu trong Từ điển (ALTHOUGH Tôi đã khởi tạo nó với kích thước mong muốn). Đối với các mục 20k đầu tiên, thời gian trung bình cho Thêm là 0,03 ms cho mỗi mục.
Bất kỳ ý tưởng nào, cách làm cho hoạt động bổ sung nhanh hơn?
Cảm ơn trước, Frank
Đây là tôi 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.");
}
}
Bạn có ghi đè 'Equals' và' GetHashCode' trong lớp 'IdPair' của mình không? Nếu vậy, thuật toán 'GetHashCode' của bạn có tạo ra sự phân bố tốt của băm không? – LukeH
IdPair chỉ là một cấu trúc với một hàm tạo. Tôi đã thêm nó vào câu hỏi của tôi – Aaginor