3

サイトを最適化しており、最初のビュールックアップの問題について長い時間をかけて読んでいます。その後のビューのルックアップは、はるかに高速になります。ミニプロファイラーは、多くの時間が最初の検索ビューにあり(〜パスを使用してこれを減らすことができることを知っています)、この段階で他のことは何でも行われていることを示しています。

キャッシングはどこで行われますか?ビュールックアップなどはどのくらいの期間キャッシュされますか?キャッシュされているものを確認できますか?遅延が発生しないようにプリロードするために何かできることはありますか?

何時間も訪れないことが多いビューがたくさんあり、パフォーマンスの突然の山と谷は望んでいません。

Azureを使用しており、多数のWebロールインスタンスがあります。各Webロールにビュールックアップの独自のキャッシュがあると想定できますか?アプリケーションごとに1回だけ発生するように、キャッシュを一元化できますか?

また、MVC4の方がビューを見つけるのが速いと読みましたか?誰かフィギュアはありますか?

4

2 に答える 2

5

デフォルトのキャッシュは15分で、HttpContext.Cacheに格納されます。これはすべて、System.Web.Mvc.DefaultViewLocationCacheクラスによって管理されます。これは標準のASP.NETキャッシングを使用するため、WAZ AppFabricキャッシュまたは新しいキャッシングプレビュー(NuGetに1つあります:http: //nuget.org/packages/Glav.CacheAdapter )からキャッシュを取得するカスタムキャッシュプロバイダーを使用できます。共有キャッシュを使用すると、ビューを解決する作業を実行する必要があるのは1つのインスタンスだけになります。または、独自のキャッシュプロバイダーを構築することもできます。

アプリケーションをリリースモードで実行し、不要なビューエンジンをクリアし、単にViewを呼び出すのではなく、正確なパスを書き込むなど、すべての方法でビューのルックアッププロセスを高速化できます。ここでそれについてもっと読む:

各ビューのキーをキャッシュに追加することで、ビューの場所をプリロードできます。次のようにフォーマットする必要があります(これは現在のVirtualPathProviderViewEngineです)。

string.Format((IFormatProvider) CultureInfo.InvariantCulture, ":ViewCacheEntry:{0}:{1}:{2}:{3}:{4}:", (object) this.GetType().AssemblyQualifiedName, (object) prefix, (object) name, (object) controllerName, (object) areaName);

MVC4の方が速いかどうかはわかりませんが、DefaultViewLocationCacheコードはMVC3の場合と同じようです。

于 2012-08-02T22:53:33.380 に答える
3

キャッシュ時間を24時間に増やすために、Global.asaxで次を使用しました

    var viewEngine = new RazorViewEngine
                         {ViewLocationCache = new DefaultViewLocationCache(TimeSpan.FromHours(24))};
    //Only allow Razor view to improve for performance
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(viewEngine);

また、この記事のASP.NETMVCのパフォーマンスの問題と部分的なレンダリングも興味深いものでした。

共有Azureキャッシングを利用するために、独自のViewLocationCacheを作成する方法を検討します。

于 2012-08-03T08:37:22.450 に答える