Tôi đã làm việc trong tình huống tương tự, nơi tôi chỉ muốn lưu các phần tử cụ thể và muốn các phần tử này được nạp một lần khi khởi động và được lưu trong bộ nhớ cache cho đến khi ứng dụng bị tắt. Đây là bộ nhớ cache chỉ đọc và được sử dụng để điền danh sách các quốc gia để người dùng có thể chọn quốc gia của họ từ danh sách.
tôi đã sử dụng fluentNhibernate Mappings, và xác định Nước lớp học của tôi với Cache.readonly()
public class CountryMap : ClassMap<Country> {
public CountryMap() {
Schema("Dropdowns");
Cache.ReadOnly();
// Class mappings underneath
}
}
Bản đồ của tôi sử dụng lớp trông như thế này:
public class UserMap : ClassMap<User> {
Id(x => x.Id).Column("UserId");
Map(x => x.FirstName);
Map(x => x.LastName);
References(x => x.Country)
.Column("CountryId");
}
tôi cấu hình bằng tay thành thạo NHibernate sử dụng thứ hai bộ nhớ cache cấp. Vì vậy, trong Confuguration thạo của tôi, tôi có:
var sessionFactory = Fluently.Configure()
.Database (...) // set up db here
.Mappings(...) //set up mapping here
.ExposeConfiguration(c => {
// People advice not to use NHibernate.Cache.HashtableCacheProvider for production
c.SetProperty("cache.provider_class", "NHibernate.Cache.HashtableCacheProvider");
c.SetProperty("cache.use_second_level_cache", "true");
c.SetProperty("cache.use_query_cache", "true");
})
.BuildSessionFactory();
Tôi đã kiểm tra trong SQL Profiler, và khi tôi nhận được một danh sách của cả nước cho một người dùng, được nạp một lần, và tôi nhận được bộ nhớ cache lượt truy cập sau khi mọi yêu cầu khác. Điều thú vị là khi hiển thị tên quốc gia của người dùng, nó tải từ bộ nhớ cache và không yêu cầu cơ sở dữ liệu. Tôi có một số mẹo từ bài đăng này bằng cách Gabriel Schenker. Hy vọng rằng sẽ giúp? Nếu bạn tìm thấy một cách tốt hơn/thích hợp, xin vui lòng cho tôi biết? Cảm ơn!
Nguồn
2009-11-24 11:50:17
Câu trả lời hay! Tôi đã làm những gì bạn đã làm thành công. Tôi thích của Ayende NhProf cho hồ sơ, tốt hơn nhiều so với hồ sơ SQL, nhưng nó không phải miễn phí (có một thử nghiệm) và đó là NHibernate cụ thể. –
Yip, tôi đã thấy một số màn hình của NHProf, có vẻ tốt. Có thể thử trước khi chúng ta phát trực tiếp. –
Tôi hiện đang sử dụng nhprof! nó rất hữu ích! –