MVC 4 プロジェクトと主に Web Api 部分で、より良い (= より速い) 応答をしようとしています。MiniProfiler を追加して、読み込みが遅い問題がどこにあるかを確認しましたが、わかりません。
duration (ms) from start (ms) query time (ms)
http://www.url.com:80/api/day?city=param (example) 1396.1 +0.0 1 sql 173.8
logging 9.3 +520.9
EF query 4051.5 +530.2 2 sql 169.6
次に、同じURLをもう一度試したところ、次の番号が表示されました。
http://www.url.com:80/api/day?city=param (example) 245.6 +0.0 1 sql 50.6
logging 8.6 +19.6
EF query 7.7 +28.3
しかし、2分後に試してみると、最初の例のように再び大きな数字が得られました。
ホーム インデックスの読み込みと同じ:
http://www.blanskomenu.amchosting.cz:80/ 333.0 +0.0
Controller: HomeController.Index 71.0 +286.8
Find: Index 100.4 +387.8
Render : Index 2468.1 +494.6
これは、最初の例のWeb Apiの私の方法です
[OutputCache(CacheProfile = "Cache1Hour", VaryByParam = "city")]
public IEnumerable<RestaurantDayMealsView> GetDay(string city)
{
var profiler = MiniProfiler.Current;
using (profiler.Step("logging"))
{
var logFile = new LogFile(System.Web.HttpContext.Current.Server.MapPath("~/Logs/"), DateTime.Today);
logFile.Write(String.Format("{0},api/daymenu,{1}", DateTime.Now, city));
}
using (profiler.Step("EF query"))
{
var meals = repo.GetAllDayMealsForCity(city);
if (meals == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return meals;
}
}
そして私のリポジトリメソッド:
public IEnumerable<RestaurantDayMealsView> GetAllDayMealsForCity(string city)
{
return db.Restaurants
.Include(rest => rest.Meals)
.Where(rest => rest.City.Name == city)
.OrderBy(r => r.Order)
.AsEnumerable()
.Select(r => new RestaurantDayMealsView()
{
Id = r.Id,
Name = r.Name,
Meals = r.Meals.Where(meal => meal.Date == DateTime.Today).ToList(),
IsPropagated = r.IsPropagated
}).Where(r => r.Meals.Count > 0);
}
私のホームインデックスの場合、コントローラーには次のようなものがあります。
public ActionResult Index()
{
return View();
}
だから私の質問は:
インデックスのレンダリングに時間がかかるのはなぜですか? 私はデフォルトのウェブサイトしか持っていないので、cssなどは問題ないと思います。
クエリではない場合、EFクエリで時間がかかるのは何ですか? これらの問題を解決するにはどうすればよいですか?
私はこれらのリンクを見ていました:SOリストとASP.NET MVCの概要 - パフォーマンスと私はいくつかのトリックを試し、他の人について読んだが、何も役に立たなかった。ホスティングに問題がある可能性はありますか? それともどこ?ありがとう