我在這裏遇到了一些性能問題:下面的代碼是我自定義的VirtualPathProvider的一部分,我覆蓋了GetCacheKey和GetCacheDependency,因此它們可以正確緩存我的剃鬚刀視圖。每當編譯器通過VirtualPathProvider重新編譯我的剃鬚刀視圖時,我該如何放置日誌?
public override string GetCacheKey(string virtualPath)
{
var key = string.Empty;
var fileResult = VerifyFilePath(virtualPath);
if (fileResult.RefinedAccessPath.IsNotNullOrEmpty())
key = EncryptHelper.MD5Encrypt(fileResult.RefinedAccessPath);
else
key = EncryptHelper.MD5Encrypt(fileResult.VirtualPath);
return key;
}
public override string GetFileHash(string virtualPath, System.Collections.IEnumerable virtualPathDependencies)
{
var fileResult = VerifyFilePath(virtualPath);
var hash = string.Empty;
if (fileResult.RefinedAccessPath.IsNotNullOrEmpty())
hash = EncryptHelper.MD5Encrypt(fileResult.RefinedAccessPath);
else
hash = Previous.GetFileHash(fileResult.VirtualPath, virtualPathDependencies);
return hash;
}
public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
{
var fileResult = VerifyFilePath(virtualPath);
switch (fileResult.Result)
{
case ExistenceResult.FoundInCloudAfterRebuildPath:
case ExistenceResult.FoundInCloudDirectly:
return new OSiteCacheDependency(fileResult.LastModified, ositeVirtualPathHelper.SiteID.ToString(), utcStart);
default:
if (fileResult.RefinedAccessPath.IsNotNullOrEmpty())
return new System.Web.Caching.CacheDependency(fileResult.RefinedAccessPath);
else
return null;
}
}
不過目前我有點擔心我的代碼是否正確與否 - 因爲當我測試了我的本地PC上,它完美的作品,但是如果我把它上傳到Azure的網站,它需要年齡獲取呈現的頁面。
視圖存儲在Azure Blob存儲上,我將日誌條目放在GetFile上,並發現它們被緩存,但它看起來像網站不斷重新編譯在每個頁面上(是的每一頁,因爲它是編譯如果我刷新Azure網站頁面即時顯示,但沒有其他網頁,我沒有訪問)
所以我的第一個猜測是 - Azure網站性能非常差,然後我升級到P3大型實例Web應用程序服務計劃,並仍然有同樣的問題。所以這讓我想到我在VirtualPathProvider中有什麼錯誤嗎?由於GetFile()方法並不總是被打開,並且刷新後立即顯示訪問頁面,所以我確信緩存也可以工作,所以它讓我想到在進程期間是否發生了其他任何編譯,導致每個頁面佔用這麼多第一次加載的時間?
任何人都可以幫忙請...
在此先感謝。
你是否在你的web.config中設置了''?如果我沒有記錯的話,如果你的web.config打開了debug,即使在發佈模式下編譯,視圖緩存默認是禁用的。 –
沒有調試屬性通過我們的web.release.config被刪除,所以我肯定緩存工作 - 我會在深入研究後不久寫一個答案 –