У меня проблемы с производительностью здесь: приведенный ниже код является частью моего пользовательского 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;
}
}
Однако в настоящее время я немного обеспокоен ли мой код является правильным или нет - потому что, когда я проверить это на моем локальном компьютере, он прекрасно работает, однако, если я загрузить его на Azure веб-сайтов, он принимает возрастов получить страницы, сделанные.
Представления хранятся в хранилище Azure Blob, и я помещаю записи журнала в GetFile и обнаруживаю, что они кэшированы, однако похоже, что веб-сайт постоянно перекомпилируется на каждой странице (да каждая страница, потому что, когда она скомпилированный, если обновить страницу веб-сайта Azure, он будет отображаться мгновенно, но не другие страницы, которые я не посещал)
Итак, моя первая догадка - производительность веб-сайта Azure очень плохая, однако я обновил ее до P3 Large Instance План обслуживания веб-приложений и по-прежнему остается той же проблемой. Поэтому я подумал, что я снова ошибаюсь в VirtualPathProvider? Поскольку метод GetFile() не всегда попадает, и посещаемая страница отображается сразу после обновления, я уверен, что кеширование также работает, поэтому мне не следует думать, есть ли какая-либо другая компиляция во время процесса, которая заставляет каждую страницу так много время для первой нагрузки?
Может ли кто-нибудь помочь ...
Заранее благодарен.
У вас есть ' ' установлен в вашем web.config? Если я правильно помню, кеширование отключено по умолчанию, если ваш web.config отключен отладки, даже если он скомпилирован в режиме деблокирования. –
никакой атрибут отладки не был удален через наш web.release.config, поэтому я уверен, что кеширование сработало - я напишу ответ об этом очень скоро после интенсивного исследования –