2011-12-29 19 views
6

Tôi đã cố gắng để đọc lên trên Caching trong ASP.NET và vẫn còn có một vài câu hỏi.Caching trong C# có phải là cách tiếp cận phù hợp với tôi không?

  1. Khi sử dụng Sql Cache Dependency ... Tôi biết rằng bạn có thể chỉ định bảng nào sẽ được theo dõi nhưng nếu thay đổi xảy ra với bất kỳ bảng nào trong số đó, bảng sẽ đặt lại toàn bộ bộ nhớ cache? Tôi hiểu rằng tôi không muốn cache các bảng sẽ có những thay đổi thường xuyên nhưng chúng tôi có thể kết thúc với một số lượng lớn các bảng được lưu trong bộ nhớ cache và thậm chí nếu mỗi bảng chỉ nhận được một vài cập nhật mỗi ngày, có thể biến thành 50 lần đặt lại bộ đệm hàng ngày (cửa sổ 8 giờ).

  2. Tôi sẽ tạo và duy trì bộ nhớ cache này qua một GAC DLL. Một số lượng lớn các ứng dụng khác nhau sẽ truy cập vào GAC đó bất cứ lúc nào. Mỗi ứng dụng có duy trì bản sao bộ nhớ cache của chính nó hay nó chỉ được lưu trữ ở một vị trí toàn cục (hoặc có thể trên mỗi nhóm ứng dụng)?

  3. Có vị trí thực tế trên máy chủ nơi tôi có thể xem dung lượng bộ nhớ cache hiện đang sử dụng không? Điều này sẽ cực kỳ thích hợp nếu mỗi ứng dụng duy trì Cache của chính nó vì điều đó có thể sẽ chiếm một lượng lớn không gian đĩa.

  4. Có cách nào để buộc bộ nhớ cache tự xây dựng lại không? Tôi có thể thấy ông chủ của tôi giả định rằng bộ nhớ cache là do lỗi cho một vấn đề cụ thể và tôi cần phải có thể loại trừ điều đó ở cấp độ gốc. Không "thay đổi thông tin và nói rằng NÊN xây dựng lại bộ nhớ cache" mà là "làm [Hành động X] và biết rằng bất cứ điều gì được trong bộ nhớ cache là bây giờ đi"

Cảm ơn trước câu trả lời và thời gian của bạn.

+0

Bạn nêu ra các vấn đề thú vị, nhưng tôi không chắc nó liên quan đến tiêu đề câu hỏi của bạn như thế nào. –

+0

và thẻ C# .. –

+0

2 sợ tôi .... – Phill

Trả lời

2
  1. SqlCacheDependency chỉ giám sát bảng trong kiểu cũ SQL 2000 cách tiếp cận, mà dựa vào trigger và bỏ phiếu. Phương pháp SQL 2005+ giám sát các thay đổi ở mức hàng và sử dụng Service Broker. Ở cấp độ của đối tượng Cache, các thay đổi sẽ làm mất hiệu lực chỉ các mục Cache được liên kết với SqlCacheDependency đã cho (không phải toàn bộ bộ nhớ đệm).

  2. Mỗi ứng dụng có một bản sao Cache riêng biệt. Nếu bạn có nhiều ứng dụng chia sẻ cùng một dữ liệu, bạn có thể cân nhắc tạo một "máy chủ lưu trữ bộ nhớ cache" riêng biệt và để ứng dụng của bạn lấy dữ liệu từ đó, sử dụng WCF - về cơ bản thêm một cấp khác vào ứng dụng của bạn.

  3. Bạn có thể xem một số bộ đếm hiệu năng liên quan đến bộ nhớ cache, nhưng nếu bạn lo lắng về dung lượng đĩa, thì không có gì phải lo lắng, vì bộ nhớ cache ASP.NET được lưu trữ hoàn toàn trong RAM. Ngoài ra, nếu RAM quá đầy đủ, một tính năng của bộ nhớ cache là nó sẽ cho phép các đối tượng cũ/không thường xuyên tham chiếu để nhường chỗ cho các đối tượng mới.

  4. Cách dễ nhất để buộc bộ nhớ cache bị xóa là chỉ cần tái chế ứng dụng hoặc AppPool của bạn (xảy ra một lần mỗi ngày hoặc theo mặc định).Nếu bạn muốn một cái gì đó nhắm mục tiêu nhiều hơn, bạn sẽ cần phải viết một số mã để buộc loại bỏ một số mặt hàng từ bộ nhớ cache, hoặc bằng cách sử dụng Cache.Remove() hoặc sử dụng phụ thuộc liên kết.

1

từ đỉnh đầu của tôi:

  1. Chỉ nội dung của bảng đó sẽ không còn giá trị.
  2. Mỗi ứng dụng web có bộ nhớ cache riêng.
  3. Bộ nhớ cache được lưu trong bộ nhớ. và xem câu hỏi này How to determine total size of ASP.Net cache? về kích thước bộ nhớ cache
  4. http://bit.ly/vsqNDl này có thể giúp
+0

Nếu bảng có khóa ngoài, nó sẽ không làm mất hiệu lực bộ đệm cho các bảng đó không? Tôi đã không làm việc với Sql Cache phụ thuộc vì vậy tôi tò mò về điều này và nếu nó không tôi có thể thấy một số sử dụng cho các dự án mới. – Brian

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