2009-02-20 29 views
6

Tôi đã tạo điều khiển người dùng trong ứng dụng của tôi "header.ascx", tôi đang chuyển một thuộc tính được chọnMenu đến điều khiển này mà điều khiển chọn giá trị được chọnMenu được chỉ định. Giả sử, tôi đã chuyển giá trị "home" hoặc "search", sau đó nó sẽ chọn (đánh dấu nó) menu tìm kiếm.Caching một điều khiển người dùng trong ASP.NET?

Tôi muốn lưu bộ nhớ cache điều khiển này, Khi giá trị của thuộc tính được chọnMenu thay đổi thì chỉ bộ nhớ cache sẽ được làm mới khác, nó sẽ chọn điều khiển từ bộ nhớ cache ??

Có thể cache kiểm soát người dùng trong asp.net không ?? Tôi đang sử dụng ASP.NET 2.0 (C#)

Trả lời

5

Tất nhiên bạn có thể! Nó được gọi là "Fragment Caching". Đây là liên kết đến số Quickstarts pageMS Knowledge base. Ngoài ra, Google.

+0

lol +1 for google! Bạn có thể đã thêm liên kết này vào một câu hỏi hay về stackoverflow http://stackoverflow.com/questions/568837/caching-a-user-control-in-asp-net – Matt

6

Bộ nhớ đệm kiểm soát người dùng trong ASP.NET được gọi là fragment caching. Việc này được thực hiện bằng cách thêm chỉ thị OutputCache vào đầu trang của bạn:

Bạn không thể thay đổi bộ nhớ cache bằng cách đặt thuộc tính trên bộ điều khiển vì điều khiển không thực sự được tạo nếu được tìm thấy trong bộ nhớ cache. Nếu bạn cố gắng truy cập vào điều khiển trong mã đằng sau nó được lưu trữ, nó sẽ là null.

Điều kiện có xác định liệu điều khiển có được lưu vào bộ nhớ cache hay không phải thứ gì đó mà bạn có thể xác định bằng cách xem yêu cầu hiện tại? Nếu có, bạn có thể sử dụng thuộc tính differbycustom (http://msdn.microsoft.com/en-us/library/system.web.ui.partialcachingattribute.varybycustom.aspx) của chỉ thị bộ nhớ cache đầu ra. Bạn có thể đặt bất kỳ chuỗi nào bạn muốn trong đó làm tham số và sau đó khi bộ nhớ đệm được đánh giá, GetVaryByCustomString() method from Global.asxa sẽ được gọi và bạn có thể đặt logic cho dù điều khiển có được lưu trong bộ nhớ cache hay không.

+0

@Helephant, Trong trường hợp này tôi nghi ngờ họ có thể sử dụng VaryByControl. – LukeH

+0

Vâng, nó sẽ là VaryByControl. – Cerebrus

1

Tôi không nghĩ đó là một ý tưởng tốt để bộ nhớ cache kiểm soát bản thân:

  • Khi điều khiển được tạo ra lần đầu tiên, nó có tài liệu tham khảo để trang mẹ nó số những người khác.
  • Khi bạn truy xuất bộ điều khiển từ bộ nhớ cache, các tham chiếu đó không còn tồn tại nữa.

Cách tiếp cận tốt hơn, tôi nghĩ là lưu vào bộ nhớ cache dữ liệu mà điều khiển đang sử dụng thay thế. ASP.NET tạo ra rất nhiều điều khiển trong suốt vòng đời của trang, việc lưu bộ nhớ đệm một điều khiển này thực sự không cải thiện được gì.

Sau đó, một câu hỏi ngu ngốc ở cuối: Điều khiển này có phải là nút cổ chai không? Bạn có thực sự cần bộ đệm không?

+1

cahcing usercontrols là bằng cách nào đó là một ý tưởng tốt, bởi vì nó giúp tiết kiệm thời gian hiển thị '(hiệu suất tối ưu hóa)' kiểm soát. tất nhiên khi nó được lưu trữ một khi bạn sẽ nhận được một tham chiếu null trong trang trừ khi và cho đến khi bộ nhớ cache hết hạn. –

+0

@Zain, tôi nghĩ chúng tôi đang đề cập đến những thứ khác nhau. Việc lưu vào bộ nhớ kiểm soát chính nó sẽ không tiết kiệm thời gian hiển thị như bạn đề xuất, tuy nhiên việc lưu vào bộ nhớ đệm đầu ra sẽ thực hiện. –

0

Để tóm tắt

sử dụng VaryByCustom, nghĩa

1- Xây dựng kiểm soát một lần nữa.
2- Có nhiều phiên bản của điều khiển trong bộ nhớ cache. sẽ được sử dụng khi các điều kiện tùy chỉnh tùy chỉnh đáp ứng. Điều này chỉ tốt nếu kiểm soát mất nhiều thời gian để xây dựng và chúng tôi có số lượng hữu hạn các phiên bản được lưu trong bộ nhớ cache để không lãng phí bộ nhớ và ứng dụng sẽ cần truy cập các thuộc tính điều khiển (trong khi nó được lưu trong bộ nhớ cache "hoặc null").).

nhưng sẽ không tốt nếu điều kiện tùy chỉnh tùy thuộc vào thuộc tính điều khiển. Tôi không thể truy cập nó, nó là null.

ví dụ tôi muốn viết một cái gì đó giống như if (giá trị mặc định được chọn trong danh sách các nước là KHÔNG USA) sau đó xây dựng lại và Cache (cung cấp cho nó một chuỗi khác nhau)

Nếu không

trong khi các đối tượng khác đang cố gắng truy cập vào danh sách contries, nó sẽ kiểm tra null, và thiết lập danh sách các nước thả xuống Hoa Kỳ.

Dữ liệu cahing sẽ thực hiện công việc. Đó là cách duy nhất.

ai đồng ý?

Cảm ơn bạn đã dành thời gian ur

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