2012-12-15 23 views
6

Tôi có một hành động ASP.NET MVC được trang trí với thuộc tính OutputCache, nhưng vấn đề là đầu ra MiniProfiler cũng được lưu trong bộ nhớ cache. Tôi muốn loại trừ đầu ra MiniProfiler khỏi bộ nhớ đệm (lỗ bánh donut), nhưng tôi không chắc chắn làm thế nào tôi có thể loại trừ một cuộc gọi như MiniProfiler.RenderIncludes().Dọn dẹp bộ nhớ đệm trên ổ đĩa - loại trừ MiniProfiler.RenderIncludes

Bất kỳ ai biết tôi có thể làm điều này như thế nào?

+1

Có quan trọng không? Nếu trang xuất phát từ bộ nhớ cache đầu ra thì hành động và bộ điều khiển không được gọi là profiler sẽ không hiển thị bất cứ điều gì, đúng không? – Aliostad

+0

Đó là một điểm thực sự tốt cho phía máy chủ, nhưng MiniProfiler cũng xuất ra thông tin về thời gian tải trong DOM vv mà sẽ là thú vị. – larsw

Trả lời

6

Đây là điểm quan trọng nếu sử dụng MiniProfiler trong sản xuất. Như thể lượt truy cập đầu tiên vào một trang là bởi một người dùng mà MiniProfiler được kích hoạt, tất cả các yêu cầu tiếp theo sẽ bao gồm các kết quả của MiniProfiler trong DOM (vì chúng hiện đang được lưu trữ). Kết quả không chỉ không chính xác (vì chúng chỉ xem xét tải đầu tiên), nhưng tất cả khách truy cập sẽ có thể xem kết quả MiniProfiler của bạn.

Thứ nhất, để cho phép donut hole bộ nhớ đệm, tôi đang làm cho việc sử dụng:

http://mvcdonutcaching.codeplex.com/

này cho phép bạn thêm các hành vi đó sẽ không được lưu trữ khi sử dụng OutputCache.

Với phần trên, bạn có thể xóa @using StackExchange.Profiling; khỏi trang Bố cục của mình. Sau đó bạn có thể thay thế:

@MiniProfiler.RenderIncludes() 

Với:

@Html.Action("MiniProfiler", "DoNotCache", excludeFromParentCache: true) 

Tôi đã tạo ra một bộ điều khiển DoNotCache, vì vậy tất cả các yếu tố non-cacheable của tôi ở bên nhau, nhưng điều này là không cần thiết và bạn có thể đặt hành động này trong bất kỳ bộ điều khiển nào.

public ActionResult MiniProfiler() 
{ 
     return View(); 
} 

Và sau đó quan điểm riêng của mình chỉ trông giống như:

@using StackExchange.Profiling; 
@{ 
    Layout = null; 
} 
@MiniProfiler.RenderIncludes() 

Điều này sẽ đảm bảo kết quả MiniProfiler được hiển thị khi cần thiết, và không được lưu trữ trong sản xuất thậm chí ở những nơi mà bạn sử dụng DonutOutputCache chú thích.

+0

Cảm ơn - Tôi sẽ xem xét lại điều này. – larsw

Các vấn đề liên quan