IIS7のパフォーマンスの問題

私たちはIIS7に関する専門家の意見を本当に必要としており、私たちの問題を説明するために最善を尽くします。詳細が必要な場合は、私に知らせてください。私はそれを取得します。

私たちはASP.NET DLLをいくつか参照しているASP.NET Webサイトを持っており、パフォーマンスは劇的なものでした。私たち自身のテストサーバーでは、同じデータセットが25秒かかりました(まだ高速ではありませんが別の問題です)。クライアントでは6分かかりました。

私は考えることができるすべてのルーチンにログを記録し、どのくらいの時間がかかるかを記録しました。これは、すべてのDLLのすべてのルーチンで、コードの処理が単にクライアントでより長くかかることを示しました。

これをさらにテストするために、まったく同じDLLを参照するデスクトップアプリケーションを作成し、これをクライアントで実行しました。それらの6分は... 5秒にまで下がった!何?

私たちはIIS7のすべての設定を実行し、それをIIS7と比較しました...私たちは正直に認めようとここで困惑しています。クライアントのサーバーの仕様は、私たちのサーバーよりもさらに高いです!

問題を拡大しましょう。例えば、オブジェクトをインスタンス化して3つのプロパティを設定する関数について話しています。 DB接続なし、まったく想像もしない、本当にシンプル:

'Creates a GeneralPractitioner
   Public Shared Function Create(ByVal gp As GeneralPractitionerTO) As GeneralPractitioner

'HACK Temporarily write to a logfile.
        WebHISPortaalBLL.WriteToLo
g.WriteToLog(Now.ToString("dd-MM-yyyy HH:mm:ss.fff") & " BEGIN WebHISPortaalBLL.GeneralPractitioner.Create", String.Empty, "PerformanceTest")

'Check if parameter is not nothing.
        If gp IsNot Nothing Then

'Create new instance of GeneralPractitioner and set properties in object initializer.
            Return New GeneralPractitioner With {.ID = gp.ID,
                                                 .Name = gp.Name,
                                                 .AGBCode = gp.AGBCode}

        Else
            Return Nothing
        End If

    End Function 

呼び出し元のコードはLINQクエリなので、その間には何もありません。それでは違いを見てみましょう。最初に私たちのテストサーバにログファイルの小さな部分を投稿します。ミリ秒を見てください。

テストサーバーでのこのメソッド:

24-11-2011 15:23:34.526 BEGIN   WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15:23:34.527   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011   15:23:34.528 BEGIN WebHISPortaalBLL.GeneralPractitioner.Create   24-11-2011 15:23:34.529 BEGIN   WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15:23:34.530   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011   15:23:34.530 BEGIN WebHISPortaalBLL.GeneralPractitioner.Create   24-11-2011 15:23:34.531開始   WebHISPortaalBLL.GeneralPractitioner.Create 24-11-2011 15:23:34.531   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create

クライアントのサーバーでも同じ方法です。

25-11-2011 10:38:11.414 BEGIN   WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10:38:11.476   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011   10:38:11.539 BEGIN WebHISPortaalBLL.GeneralPractitioner.Create   25-11-2011 10:38:11.601 BEGIN   WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10:38:11.664   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011   10:38:11.726 BEGIN WebHISPortaalBLL.GeneralPractitioner.Create   25-11-2011 10:38:11.789 BEGIN   WebHISPortaalBLL.GeneralPractitioner.Create 25-11-2011 10:38:11.851   BEGIN WebHISPortaalBLL.GeneralPractitioner.Create

このタスクを完了するためにテストサーバーが平均1ミリ秒(実際には0.5ミリ秒)かかる場合、クライアントのサーバーは平均して62ミリ秒かかることになります。

なぜ??

そこに私たちを助けることができる人がいますか?我々はコメントをいただければ幸いです。何でも。

1
問題はこのコードではなく、この関数を呼び出すコードです。それは何ですか?
追加された 著者 cjk,
この回答を確認してください、データベースについてのことですが、一般的です。 stackoverflow.com/questions/ 6572612 /…
追加された 著者 Aristos,
両方のサイトで基礎となるデータベースは同じですか?テストデータのみをローカルに持ち、クライアントで実際の(つまり、より多くの)データを持っている場合、これは多くを占める可能性があります。生成されたSQLをlinqクエリから取得し、データベースに対して直接実行してみてください。
追加された 著者 Matthew Evans,
私たちはあなたがそこでタイミングを取っているというコードを見ることができますか?
追加された 著者 Andrew Barber,
OK;私は間違いなく、ロギング機能を見たいと思って、 GeneralPractitioner のコンストラクタに何かがある場合は、
追加された 著者 Andrew Barber,
その情報を知っている、はい。私は同意するだろう。
追加された 著者 Andrew Barber,
おそらく、いくつかの余分なネットワークコール(つまりWebサービス)があり、
追加された 著者 Adrian Iftode,
プロファイラをインストールできますか?何が起こっているのかを調べる最も良い方法は、プロファイラをインストールして(最初のサーバーでは)、ボトルネックが何であるかを確認することです。クライアントのインフラストラクチャ上のボトルネックは異なる可能性があります。可能であれば、そこにプロファイラもインストールしてください。私はRedgateプロファイラが非常に便利であることを発見しました...
追加された 著者 Neville Kuyt,
私はプロファイラを使い始めるでしょう - それはあなたのコードが時間を費やしている場所を釘付けにし、深く掘り下げることができます。少し運があれば、クライアントマシン上でなぜそれが遅いのかがわかります。
追加された 著者 Neville Kuyt,
「メイン」行をコメントアウトするとどうなりますか?新しいGeneralPractitionerを返す...それはどのくらい速く走るのだろうか?
追加された 著者 DmitryK,
@アンドリュー・バーバー:私はあなたの返事に感謝していますが、私の謙虚な意見では、あなたは本当にここで目標を下げています。 GeneralPractitionerのコンストラクタは空であり、パフォーマンスの問題が報告された後にログ機能が配置されていました。だから、彼らはそれとは関係がありません。合意?
追加された 著者 Danny van der Kraan,
@マシューエバンス:まず、返信いただきありがとうございます。私たちは実際にクライアントのDBのコピーをとり、その状況を解消するためにテストセットアップで使用しました。明らかにするために、私の謙虚な意見ではデータとは関係ありません(コードサンプル+ログリストを参照)。
追加された 著者 Danny van der Kraan,
@アンドリュー・バーバー:ああ、私は最初に試しましたが、それは私に問題をもたらしました。私は今それを追加しました。申し訳ありませんが、すべてが歪んで見えます。あなたはそれから何かを作ることができることを願っています。
追加された 著者 Danny van der Kraan,
@cjk: 'hcp.GeneralPractitioners.AddRange(gpTOのgpTOからGeneralPractitioner.Create(gpTO)を選択してください)'しかし、留意してください。これは単なる例です。ライフサイクル全体にわたって、コードはクライアントのマシンではテストマシンより遅くなります。
追加された 著者 Danny van der Kraan,
@Neville K:私はRedGateのANTSパフォーマンスプロファイラを調べました。私は愛していると思います。だから私たちはそれを使いたいと思う。しかし、私は本当にここで頑固になりたくありません(しかし、私は開発者ですので、あなたは何を期待しましたか?)これはコード内の特定の問題を見つけるためのものです。私たちのログリストによれば、基本的に、コードの各行は、テストマシンよりもクライアントのマシン上で遅いことが示されています。これは答えではありません。ごめんなさい。
追加された 著者 Danny van der Kraan,
あなたの返信のために@Neville K:Thnx。私たちはそれを調べます。
追加された 著者 Danny van der Kraan,
@アドリアンIftode:まず、返信thnx。悲しいかな、私たちのウェブサイトとDLLの作業だけをサーバーが待っているようです。
追加された 著者 Danny van der Kraan,
@Neville Kあなたは私に確信しています。私はそれを撃つだろう。私に結果をもたらす時間を与えてください。つづく...
追加された 著者 Danny van der Kraan,
@Aristosあなたの貢献に感謝します。それらは(あいまいな)ヒントの多くです。私はそれらをネットワークの人に渡しました。何かがそれから出てくるなら私はここにそれを掲示するでしょう。
追加された 著者 Danny van der Kraan,

答えはありません

0