Tôi đã có một hoạt động tìm nạp dữ liệu tương đối đắt tiền mà tôi muốn lưu vào bộ nhớ cache kết quả. Thao tác này được gọi là từ const
phương pháp, đại khái như thế này:Caching dữ liệu đắt tiền trong C++ - statics chức năng scoped vs biến thành viên có thể thay đổi
double AdjustData(double d, int key) const {
double factor = LongRunningOperationToFetchFactor(key);
return factor * d;
}
Tôi muốn AdjustData
vẫn const
, nhưng tôi muốn để cache ra các yếu tố vì vậy tôi chỉ lấy nó lần đầu tiên. Hiện tại, tôi đang sử dụng mutable map<int, double>
để lưu trữ kết quả (bản đồ là từ key
đến factor
), nhưng tôi đang nghĩ rằng việc sử dụng chức năng tĩnh có thể là giải pháp tốt hơn - yếu tố này chỉ cần bởi hàm này và không liên quan đến phần còn lại của lớp.
Điều đó có vẻ như là một cách hay không? Có lựa chọn nào tốt hơn không? Những điều tôi có thể suy nghĩ về, đặc biệt là đối với thread-an toàn.
Cảm ơn,
Dom
Có thể không cần thiết phải khóa thao tác chạy dài, chỉ cần tìm/chèn các cuộc gọi trên bản đồ. –
Tôi nghĩ bạn đúng. Hãy để tôi điều chỉnh nó hơn nữa. –
Tạo bản đồ tĩnh trong khi không giữ khóa không được đảm bảo an toàn chỉ vì bạn có thể xây dựng hai lần và hủy đôi bản đồ nếu hai chủ đề gọi hàm này đồng thời lần đầu tiên được sử dụng. Xem http://blogs.msdn.com/oldnewthing/archive/2004/03/08/85901.aspx – bk1e