Tôi đang tạo thư viện mà tôi đang thử nghiệm hiệu suất. Trong đó tôi tạo ra một Dictionary<Type, X>
một lần. Các mục hiện được chèn theo thứ tự ngẫu nhiên. Từ điển vẫn không thay đổi trong suốt thời gian của ứng dụng.Thay thế nhanh hơn từ điển <Type, X>?
Sau đó, nó thường được sử dụng để tra cứu các mục. Tra cứu là một trong những nút cổ chai lớn hơn trong thư viện.
Có, tôi đang tối ưu hóa vi mô, nhưng để tìm hiểu. Tôi tự hỏi nếu có một cách tốt hơn để có được hiệu suất tra cứu?
Cập nhật
Tôi đã sử dụng dotTrace để đo hiệu suất. Báo cáo + dotTrace nằm trong máy tính ở nhà của tôi, vì vậy tôi không có báo cáo ở đây (có thể đã tải lên ở một nơi khác).
tôi đã sử dụng các bài kiểm tra tìm thấy ở đây: https://github.com/danielpalme/IocPerformance
Định nghĩa từ điển được tìm thấy ở đây: https://github.com/jgauffin/Griffin.Container/blob/master/Source/Griffin.Container/ContainerBase.cs
(tôi đã tạo container thứ sáu cuối cùng, tôi không mong đợi quá nhiều)
Update2
Dictionary.TryGetValue
mất 101ms tổng số Resolve
(tổng số 251ms) là 40,2% nếu tôi đã giải thích các con số chính xác.
a: Có bao nhiêu loại/cặp trong dữ liệu, b: điều gì khiến bạn nghĩ rằng đó là một nút cổ chai? (tức là bạn đã đo đạc như thế nào? chúng ta có thể thấy bất kỳ mã tra cứu nào không?) –
và c: là những người gọi sử dụng các loại tĩnh (tức là 'int', vv) hay chúng đang sử dụng các đối tượng' Loại' do sự phản ánh? nếu người gọi biết các loại tĩnh, có một số thủ thuật có thể được sử dụng –
@MarcGravell: bạn có thể mở rộng một chút về các thủ thuật đó (câu trả lời hoặc liên kết) vì nó là một chủ đề thú vị không. cảm ơn – mathieu