Web アプリケーションは、ローカルでテストすると非常に高速になることがありますが、LAN 上でテストすると、パフォーマンスの問題が見つかることがあります。LAN 上では通常の速度のアプリケーションであっても、WAN 上では問題が発生することがあります。これらの問題は通常、アプリケーションの過失やエラーが原因であり、システム アーキテクチャとは関係なく、実際の環境でのデバッグやテストを通じて問題を発見して解決できます。
今日私たちが話しているのは、アーキテクチャを改善することによって ASP.Net アプリケーションのパフォーマンスを根本的に向上させることです。
まず、ASP.Net の簡単なアプリケーションをいくつかテストしてみましょう。
テスト環境: AthlonXP 3200+、DDR400 512M、WindowsXP SP2、ネイティブ SQL Server 2000、中国 Northwind データベースの製品テーブル (Access からインポート)、約 70 レコード。
試験シリアル番号 | プログラムの種類 | 試験方法 | 試験結果 (1 秒あたりのリクエスト数) | SQLServer | ASP.Net | が占有しているリソース | 占有されるリソース |
1 | Web サービスは | DataSet に製品テーブルを入力し、レコード数を返します。 | 250 倍 | 100% | - | ||
2 | Web サービスは | DataSet に製品テーブルを入力し、DataSet を返します。 | 138 回 | 54% | 46% | ||
3 | Web アプリケーション | は、 DataSet と積テーブルを結合し、Bind DataGrid を返します。 | 70 回 | 28% | 72% |
最初のテストでは、Web サービスはデータベースからレコードを読み取り、それを DataSet に入力し、レコード数を返します (レコードは返さないことに注意してください)。システムが占有するシステム リソースはほとんどないと想定されます。リソースは SQL Server によって完全に占有されており、悪影響があるかどうかは明らかではありません。
2 番目のテストでは、Web サービスが DataSet を返すと、1 秒あたりのリクエスト数がほぼ半分に減少し、システム リソースの半分が ASP.Net によって DataSet のシリアル化に使用されます。
Web アプリケーションが DataSet を DataGrid にバインドしてページを返す 3 番目のテストでは、1 秒あたりのリクエスト数がほぼ 4 分の 3 に減少します。これらのシステム リソースは、ASP.Net によって DataSet を DataGrid にバインドするために使用されます。ページをシリアル化して返します。
上記のテストから、DataGrid のバインドとシリアル化が多くのシステム リソースを占有することがわかります。システムのパフォーマンスを向上させたい場合は、アーキテクチャを改善する必要があります。
1. データベースに対する操作をページから分離し、独立した永続層に置きます。
このように、サーバー側の DataGrid のバインド作業を置き換えて、クライアント側の DOM または XSLT を介してデータがテーブルとして表示されるため、サーバーへの負担が大幅に軽減されます。また、クライアントは AJAX を通じて永続層からデータを取得するため、ユーザー エクスペリエンスが向上します。
2. キャッシュを使用できるように、ページをデータから完全に分離します。
AJAX を適用する一部のページは引き続き初期データを読み取るため、ページをキャッシュできません。これらのページは通常、通常のページよりも複雑で、より多くのリソースを占有します。キャッシュを使用できると、システムのパフォーマンスがさらに向上します。
上記 2 点により、ASP.Net のパフォーマンスはほぼ 2 倍になります。
自分でテストすることも、サンプルwww.BizStruct.cnにアクセスすることもできます。