1

ベンダーによって作成された本番Webアプリケーション(.NET 4)のトラブルシューティングを行っています。

この数週間、このサイトで速度の問題が発生しています。

もともと、焦点はデータベース側にありました。方程式のその部分を除外することに抵抗がないので、今日はかなりの時間を費やしてWebアプリケーションをデバッグし、実際の速度の問題がどこから来ているのかを確認しました。

私が見つけたのは、Webアプリケーションのこの特定の部分で、新しいInternet Explorerウィンドウを開いて、データベースから返される大量のXMLデータを表示することです。

コードを調べ、デバッガーを使用して何が起こっているのかを理解しようとした後...これが私が見つけたものです:

この特定のページのコードがすべてのデータの入力を完了すると、iexploreプロセスには692,044Kのプライベートワーキングセットがあります。これは、msxml3.dllの多数の処理中のActiveXコントロールの結果のようです。

いくつかの調査の後、私はこのマイクロソフトの記事を発見しました: http ://support.microsoft.com/?scid=kb%3Ben-us%3B815112&x=15&y=14

「Microsoftは.NETアプリケーションでのMSXML(MicrosoftのCOMベースのXMLパーサー)の使用をサポートしていません。MSXMLは.NETFrameworkと互換性のないスレッドモデルとガベージコレクションメカニズムを使用します。.NETアプリケーションでのMSXMLの使用COMの相互運用性により、デバッグが困難な予期しない問題が発生する可能性があります。Microsoftは、.NETコードでMSXMLオブジェクトを直接インスタンス化して使用することを推奨またはサポートしていません。また、相互運用性の境界を越えてMSXMLインターフェイスポインタをマーシャリングすることも推奨またはサポートしていません。」

これは、ActiveXオブジェクトを作成しているコードの一部です。

                var oTmp = new ActiveXObject("MSXML2.Domdocument");
                oTmp.loadXML('<plan_data>' + returnValue + '</plan_data>');

プロセスエクスプローラーは、メモリが増加するにつれて、iexploreプロセスにロードされたいくつかのMSXML3.dllを取得します。この特定のウィンドウを閉じた後でも、約220,000 Kのメモリを使用しているため、適切にクリーンアップされていないようです(おそらく上記のガベージコレクションメカニズムが原因です)。

だから、私の質問は...これに精通している誰かが、これがWebアプリケーションの不十分に設計されたセクションのように見えるかどうかについてアドバイスを提供できますか?

この情報を開発者に渡して見てもらいたいのですが、誰かが最初に専門家のアドバイスをくれることを望んでいました。

ありがとうございました。

4

2 に答える 2

1

大規模な XML 構造をメモリに処理してから操作するときはいつでも、かなりメモリを集中的に使用する操作です。ドキュメント全体をメモリに保持する必要がある場合は、現在のコードを名前空間のXDocumentに置き換えることを検討してくださいSystem.Xml.Linq

XML ドキュメントを 1 回だけストリーミングする必要があり、各ノードを読み取るときに操作を実行する必要がある場合は、大きな XML ドキュメントのストリーミング変換 を参照してください。

編集

@Yahiaは、私が見逃した良い点を指摘しています...このコードはクライアント側で実行されているようです。そうですか?もしそうなら、なぜ IE だけにしないのでしょうか (あなたの ActiveX は IE でしか動作しません;-) プラグインを備えた他のブラウザもあります ;-) 結果の XML を表示します。XML が大きすぎない場合は、適切に処理されます (ただし、数 MB を超えると、最初の処理に非常に長い時間がかかります)。

于 2012-06-07T02:17:22.423 に答える
0

あなたが示すコードは、ブラウザ内で実行されるJavaScriptコードのようです...この点に関して、言及されたKB記事はあなたの状況には当てはまりません...それは言った:「大量のXML」をロードするのは悪い設計ですあなたが発見したように、ブラウザに。

解決策としては、サーバーベースのページング メカニズムを使用したり、UI に何らかのフィルタリング メカニズムを提供したりして、完全な XML をブラウザーに配置する必要がある状況が発生しないようにすることです。

于 2012-06-07T02:18:53.720 に答える