1

asp.netmvc2アプリケーションをテストするためにredgateパフォーマンスプロファイラーを使用しています。私が見つけたものの1つは、XMLSerializerがCPU時間を消費しすぎていたため、この投稿を参照してください。今使っているところに変えましたXmlSerializerCache

XmlSerializerの問題はなくなり、JmeterでWebサイトを使用して同時に80人のユーザーをシミュレートすることにより、アプリケーションのプロファイリングを行っています。だから今、時間がかかるトップメソッドはFirstOrDefault()私が引っ張っているいくつかのデータを実行しています私は例を挙げます-

var values=(from c in DataContext.Table1
           join s in DataContext.Table2 on new { c.Id, c.date } 
            equals new { s.Id, s.date } into list
                          where c.Id== Id && c.date == date
                          from s in list.DefaultIfEmpty()
                          select new DayDTO()
                          {
                              Points = c.points,
                              Points1 = c.points1,
                              Points2 = c.points2,
                              Points3 = c.points3,
                              Points4 = c.points4
                          }).FirstOrDefault();

誰かが私にこれを改善するために何ができるかを提案できますか?現在の時間は、上位2つの方法で25秒と16秒です..同時に80人のユーザーをシミュレートしているためであり、データベース(sql server 2005)側で、テーブルが大きすぎてインデックスが作成されているなどの問題があります。など...そして私はそれを調べますが、現在私はあなたがコードで見た問題、すなわちC#側の問題を特定しようとしています。

助けてくれてありがとう!

4

2 に答える 2

2

これは、トップタイムが「排他時間」ではなく「包括時間」であることを前提としています。

包括的時間とは、メソッドによって呼び出されたコードが含まれていることを意味します。この場合、FirstOrDefaultはデータベース呼び出しを実行します。データベース呼び出しは遅延のコンテキストでコストがかかりますが、CPUスレッドはブロックされ、データベース呼び出しを待機している間はCPUを使用しません。

まず、これが問題であるかどうかを自問する必要があります。スループットには大きな影響はありませんが(データベースサーバーが負荷を処理できると仮定)、呼び出しの遅延に影響します。

これが問題である場合は、実際のSQLクエリを高速化する必要があります。SQLプロファイラーを起動し、実際の質問をキャッチしてから、SQLManagementStudioで実行する必要があります。実行プランを調べて、クエリが予想よりも遅いかどうかを確認し、その理由を理解してください。遅すぎる場合は、最初にインデックスを確認することをお勧めします。

于 2010-12-01T18:39:05.503 に答える
1

FirstOrDefaultは、ケースで列挙を強制しているメソッドであるという理由だけで、おそらく原因として呼び出されています。その前に.ToList()を投入すると、負担が.ToList()にシフトすることに気付くでしょう。

于 2010-12-01T18:39:41.003 に答える