Giả sử rằng tôi có các đối tượng sau đâyQuản lý bộ nhớ/bộ nhớ đệm cho các đối tượng tốn kém trong C#
public class MyClass
{
public ReadOnlyDictionary<T, V> Dict
{
get
{
return createDictionary();
}
}
}
Giả sử rằng ReadOnlyDictionary
là một chỉ đọc bao bọc xung quanh Dictionary<T, V>
.
Phương thức createDictionary
mất nhiều thời gian để hoàn thành và trả lại từ điển tương đối lớn.
Rõ ràng, tôi muốn triển khai một số loại bộ nhớ đệm để tôi có thể tái sử dụng kết quả của createDictionary
nhưng cũng không muốn lạm dụng bộ thu gom rác và sử dụng nhiều bộ nhớ.
Tôi đã nghĩ đến việc sử dụng WeakReference
cho từ điển nhưng không chắc chắn nếu đây là phương pháp tốt nhất.
Bạn sẽ đề xuất điều gì? Làm thế nào để xử lý đúng kết quả của một phương pháp tốn kém có thể được gọi là nhiều lần?
CẬP NHẬT:
Tôi quan tâm đến lời khuyên cho thư viện C# 2.0 (đơn DLL, không trực quan). Thư viện có thể được sử dụng trong một máy tính để bàn của một ứng dụng web.
CẬP NHẬT 2:
Câu hỏi này cũng phù hợp với các đối tượng chỉ đọc. Tôi đã thay đổi giá trị của thuộc tính từ Dictionary
thành ReadOnlyDictionary
.
UPDATE 3:
Các T
là loại tương đối đơn giản (string, ví dụ). V
là một lớp tùy chỉnh. Bạn có thể giả định rằng một thể hiện của V
là tốn kém để tạo. Từ điển có thể chứa từ 0 đến vài nghìn phần tử.
Mã được giả định được truy cập từ một chuỗi đơn lẻ hoặc từ nhiều luồng với cơ chế đồng bộ hóa bên ngoài.
Tôi ổn nếu từ điển là GC-ed khi không ai sử dụng nó. Tôi đang cố gắng để tìm một sự cân bằng giữa thời gian (tôi muốn bằng cách nào đó bộ nhớ cache kết quả của createDictionary
) và chi phí bộ nhớ (tôi không muốn giữ bộ nhớ bị chiếm đóng lâu hơn cần thiết).
Điều gì về việc sử dụng các hệ thống bên ngoài? memcached (với hết hạn) có thể? – eyossi
Đây có phải là ứng dụng dành cho web hoặc máy tính để bàn không? – McGarnagle
@dbaseman vui lòng xem cập nhật của tôi cho câu hỏi. – Bobrovsky