Tôi có một số nơi triển khai một số loại bộ nhớ cache có thể hữu ích. Ví dụ: trong trường hợp thực hiện tra cứu tài nguyên dựa trên chuỗi tùy chỉnh, hãy tìm tên thuộc tính bằng cách sử dụng phản chiếu hoặc chỉ có một tên là PropertyChangedEventArgs
cho mỗi tên thuộc tính.C#: Cách triển khai bộ nhớ cache thông minh
Một ví dụ đơn giản mới nhất:
public static class Cache
{
private static Dictionary<string, PropertyChangedEventArgs> cache;
static Cache()
{
cache = new Dictionary<string, PropertyChangedEventArgs>();
}
public static PropertyChangedEventArgs GetPropertyChangedEventArgs(
string propertyName)
{
if (cache.ContainsKey(propertyName))
return cache[propertyName];
return cache[propertyName] = new PropertyChangedEventArgs(propertyName);
}
}
Nhưng, sẽ làm việc này không? Ví dụ, nếu chúng ta có một tải toàn bộ các thuộc tính khác nhau, điều đó có nghĩa là chúng ta sẽ kết thúc với một bộ nhớ đệm khổng lồ đang ngồi ở đó không bao giờ bị thu gom rác hoặc bất cứ thứ gì. Tôi đang tưởng tượng nếu những gì được lưu trữ là những giá trị lớn hơn và nếu ứng dụng là một ứng dụng dài, điều này có thể kết thúc như một vấn đề ... hoặc bạn nghĩ sao? Bộ đệm tốt nên được triển khai như thế nào? Cái này có đủ tốt cho hầu hết các mục đích không? Bất kỳ ví dụ về một số triển khai bộ nhớ cache tốt đẹp mà không phải là quá khó hiểu hoặc cách quá phức tạp để thực hiện?
"* Chỉ có hai điều cứng Khoa học Máy tính:. Huỷ bỏ hiệu lực bộ nhớ cache và điều đặt tên *" - Phil Karlton – JulianR
Đây là không đáng một câu trả lời toàn bộ, nhưng việc thực hiện đặc biệt này sẽ thất bại một cách ngoạn mục trong môi trường đa luồng. Ở mức tối thiểu bạn cần một khóa xung quanh quyền truy cập vào 'cache' trong' GetPropertyChangedEventArgs() '. Chỉ cố gắng giúp đỡ bất kỳ ai đến cùng và sao chép-pastas này. – aaronburro