Bạn có thể sử dụng thông số VaryByCustom
cho việc này.
Trong điều khiển người dùng của bạn, bạn sẽ có những điều sau đây:
<%@ OutputCache Duration="1000" VaryByParam="None" VaryByCustom="MyKey" %>
Sau đó, bạn sẽ ghi đè lên các phương pháp GetVaryByCustomString
trong Global.asax của bạn như vậy:
public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "MyKey")
{
object o = context.Current.Application["MyGuid"];
if (o == null)
{
o = Guid.NewGuid();
context.Current.Application["MyGuid"] = o;
}
return o.ToString();
}
return base.GetVaryByCustomString(context, arg);
}
Cuối cùng trong MyPage.aspx
bạn sẽ làm điều này :
Application["MyGuid"] = Guid.NewGuid();
Làm thế nào để nó hoạt động?
Bất cứ khi nào bộ điều khiển của bạn được lưu vào bộ nhớ cache, nó được liên kết với một chuỗi (chuỗi được trả về từ phương pháp GetVaryByCustomString
khi khóa của bạn được chuyển vào khóa VaryByCustom
).
Bất cứ khi nào điều khiển được sử dụng sau đó, GetVaryByCustomString
được gọi lại. Nếu chuỗi được trả về khớp với phiên bản được lưu trong bộ nhớ cache của kiểm soát thì phiên bản được lưu trong bộ nhớ cache sẽ được sử dụng.
Trong trường hợp của chúng tôi, "MyKey" được chuyển vào GetVaryByCustomString
và trả về bất kỳ nội dung nào được lưu trữ trong Application["MyGuid"]
.
Bất cứ khi nào MyPage.aspx
được gọi, nó thay đổi Application["MyGuid"]
thành giá trị ngẫu nhiên mới.
Khi điều khiển của bạn được sử dụng tiếp theo, phương pháp GetVaryByCustomString
sẽ trả về giá trị mới và vì không có phiên bản được lưu trong bộ điều khiển được liên kết với giá trị đó, điều khiển sẽ được tạo lại. (Kiểm soát sau đó sẽ được lưu trữ và liên kết với giá trị mới, để tiếp tục cho đến khi cuộc gọi tiếp theo đến MyPage.aspx
v.v.)
Có tổng quan here.
Bạn có chắc đây là bộ nhớ cache giống nhau không? Tôi nghĩ rằng OutputCache là một điều IIS. Tôi không nghĩ rằng công trình này. –
Điểm tốt, tôi quên bộ nhớ cache hạt nhân –
Bộ nhớ đệm hạt nhân được bật theo mặc định trong IIS7: http://technet.microsoft.com/en-us/library/cc731903(v=ws.10).aspx Vì vậy, nếu bạn chưa bao giờ cấu hình này, bạn đã kích hoạt nó. –