Tôi có một điều khiển người dùng web, nó phục vụ một số tính toán dữ liệu có khả năng chuyên sâu và tôi muốn nó được lưu trữ đầu ra để mỗi lần xem trang không tính toán lại dữ liệu . Nó nằm trên các trang được xem rất thường xuyên vì vậy nó khá quan trọng tôi làm cho nó hoạt động đúng!ASP.net Làm thế nào để tạo ra bộ nhớ cache một webusercontrol kiểm soát tài sản công cộng
Đối với bối cảnh, nó được sử dụng trên trò của chúng tôi: http://www.scirra.com/arcade/action/93/8-bits-runner
Bấm vào số liệu thống kê, dữ liệu cho các đồ thị và số liệu thống kê được tạo ra từ webusercontrol này.
Sự bắt đầu của sự kiểm soát như sau:
public partial class Controls_Arcade_Data_ArcadeChartData : System.Web.UI.UserControl
{
public int GameID { get; set; }
public Arcade.ChartDataType.ChartType Type { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Bây giờ những khó khăn tôi đang gặp là output cache cần phải phụ thuộc vào cả GamID và Loại biểu đồ.
Điều khiển này được tái sử dụng với nhiều kết hợp khác nhau của GameID và các loại, tôi cần nó để tạo bộ nhớ cache cho từng loại nhưng tôi đang cố gắng tìm hiểu cách thực hiện.
Ví dụ, một trò chơi điện tử có thể vượt qua trong GameID = 93
và Type = GraphData
, khác có thể GameID = 41
và Type = TotalPlaysData
và khác có thể GameID = 93
nhưng Type = TotalPlaysData
. Tất cả những dữ liệu này sẽ trả về các dữ liệu khác nhau và có các bộ đệm đầu ra khác nhau.
Việc kiểm soát được sử dụng trên trang trò chơi loại như thế này (các thông số đang thực sự thiết lập trong codebehind)
<div>Total Plays:</div>
<div class="count"><Scirra:ArcadeChartData runat="server" GameID="93" Type="TotalPlays" /></div>
<br /><br />
<div>Total Guest Plays:</div>
<div class="count"><Scirra:ArcadeChartData runat="server" GameID="93" Type="TotalGuestPlays" /></div>
etc.
Bất kỳ giúp đánh giá cao! Tôi đã dành một thời gian tìm kiếm trực tuyến và nó vẫn tiếp tục như một thứ tôi cần phải giải quyết nhưng không thể hình dung ra điều này.
Sửa
Edit: Tôi đã thử thêm dòng này để kiểm soát của tôi: <% @ OutputCache Thời gian = "20" VaryByControl = "GameID; Loại" %>
Nhưng nó chỉ ném lỗi Object reference not set to an instance of an object.
trên dòng nơi GameID
đang được đặt lần đầu tiên trên trang ASPX bằng cách sử dụng điều khiển.
vì anh ấy muốn sử dụng kiểm soát nhiều lần trong cùng một trang, giải pháp này không hợp lệ. không thể có cùng một ID cho nhiều điều khiển trong cùng một trang. –
Bạn có thể sử dụng các ID khác nhau trên cùng một trang; chỉ cần nhớ rằng ID là một phần của khóa bộ nhớ cache, vì vậy có thể nhận được nhiều bản sao của cùng một đầu ra. Nếu Kiểu luôn được đặt dựa trên vị trí của điều khiển trên trang, như trong câu hỏi, đó có thể không phải là vấn đề. – RickNZ
Điều này dường như hoạt động như tôi muốn! Sẽ kiểm tra nhiều hơn một chút và báo cáo lại. –