2012-02-22 24 views
1

我已經實現了一個基於磁盤的自定義緩存提供程序,它可以很好地工作,除了一個問題。當我在aspx中使用提供者時,生成的密鑰是從「a2 /../../ default.aspx」開始的,這很好。當我在用戶控件中使用相同的提供程序時,生成的密鑰的格式爲「lfffffff40e80 ....」,直到應用程序池回收爲止。然後,對於相同的用戶控制,會生成一個類似的密鑰(但不相同),這意味着不能使用新密鑰訪問兌現的用戶控制,並且在磁盤高速緩存中爲相同的用戶控件生成新條目。ASP.net 4.0使用自定義緩存提供程序生成密鑰的片段緩存

這是自定義緩存提供程序使用用戶控件的方式嗎?如何在應用程序池回收時爲用戶控件生成相同的密鑰?

預先感謝您!

回答

0

我不相信有一種方法來控制如何創建緩存鍵 - 對於用戶控件來說,它是一個包含組合多個哈希代碼和/或包括堆棧跟蹤哈希等的涉及進程。因爲總是會有哈希某些工廠對象的代碼用於計算緩存密鑰,因爲對象的哈希代碼會有所不同,所以您將在新鮮的應用程序域(應用程序池回收後)中獲得不同的密鑰。

因此,即使在應用程序池回收後創建了新的緩存副本,也沒有看到任何主要問題 - 因爲您需要調整時間以及(因爲應用程序啓動代碼將不會經常拖動應用程序池回收需要在每次回收後運行)。

順便說一句,您可以有一個Shared高速緩存的副本,用於不同頁面上的多個用戶控件實例。

+0

非常感謝您的回答! – 2012-02-23 18:47:09