ここで少しパフォーマンスの問題があります。以下のコードはカスタム VirtualPathProvider の一部です。GetCacheKey と GetCacheDependency を上書きして、剃刀ビューを適切にキャッシュできるようにしました。
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 Web サイトにアップロードすると、ページがレンダリングされるまでに AGES かかります。
ビューは Azure Blob ストレージに保存され、GetFile にログ エントリを配置すると、それらがキャッシュされていることがわかりますが、Web サイトは各ページで常に再コンパイルされているように見えます (はい、各ページです。リフレッシュするとコンパイルされるためです)。 Azure Web サイト ページはすぐに表示されますが、アクセスしたことのない他のページは表示されません)
したがって、私の最初の推測では、Azure Web サイトのパフォーマンスは非常に低いですが、それを P3 Large Instance Web App Service プランにアップグレードしても、同じ問題が発生しました。それで、VirtualPathProvider にもう一度エラーがあるのではないかと考えました。GetFile() メソッドが常にヒットするとは限らず、アクセスしたページが更新直後に表示されるため、キャッシュも機能していると確信しているため、プロセス中に他のコンパイルが発生して各ページが非常に多く使用されているかどうかを考えさせられます最初のロードの時間?
誰か助けてください...
前もって感謝します。