2010-12-01 18 views
1

redgate performance profilerを使用して、asp.net mvc 2アプリケーションをテストしています。私が知ったことの1つは、XMLSerializerがCPU時間をあまりにも多く費やしていて、this postからの参照です。私は今どこにXmlSerializerCacheを使用するかに変更しました。この.net Webサーバーのパフォーマンスプロファイリングの問題を解決するにはどうすればよいですか?

今のXmlSerializer問題が存在しなくなったと私はJMeterのでウェブサイトを使用して、同時に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#の側のコードすなわち問題に見るすべての問題を特定しようとしています。..

私は任意のヘルプのおかげでいただければ幸いです!

+1

サーバーに送信するSQL文にアクセスできますか。 SQL Management Studio?、多分Linqから生成されたSQLは最適ではない – Sebastian

答えて

2

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

込み時間は、この場合にFirstOrDefaultデータベースコールを実行するメソッドによって呼び出されたすべてのコードを含むことを意味します。データベース呼び出しは待ち時間の点で高価ですが、CPUスレッドはブロックされ、データベース呼び出しを待っている間はCPUを使用しません。

まず、これが問題であるならば、それはかなり(データベースサーバが負荷を処理できると仮定)のスループットに影響を与えません自問してみて、しかし、あなたの呼び出しのレイテンシー必要があります。

これが問題になる場合は、実際のSQLクエリをスピードアップする必要があります。 SQLプロファイラを起動し、実際の質問をキャッチしてから、SQL管理スタジオで実行する必要があります。実行計画を見て、クエリが予想よりも遅いかどうかを確認し、その理由を把握してください。遅すぎる場合は、索引付けをチェックして始めてください。

1

FirstOrDefaultは、おそらくそれはあなたのケースで列挙を強制された方法だという理由だけで犯人として呼び出されています。その前に.ToList()をスローすると、.ToList()に負担が移ります。

関連する問題