昨日、.NET のパフォーマンスを最大化する方法についての記事を投稿しました。多くのコメントをいただき、ありがとうございます。辛抱強くコメントを書いてくださった方々に感謝します。多くの恩恵を受けました。
昨日の記事は、主にコードの記述の詳細から速度の向上に焦点を当てました。パフォーマンスの向上を実際に感じるのは難しいかもしれませんが、プログラマーとして、自分のコードの品質を常に向上させることは常に追求する目標です。
実際、ハードウェアの発展により、ハードウェアの速度はほとんどの人々のニーズをはるかに満たすようになり、現在のソフトウェア開発ではアルゴリズムの効果が薄れてきているとさえ言う人もいます。以前、MIT のデータ構造ビデオを見たのを覚えています。そのとき、講義を担当した教授が質問をしました (はっきりとは覚えていませんが、彼が言いたかったのはこれでした): アルゴリズムはもはや重要ではないのに、なぜ私たちはここにいるのですか?研究についてはどうですか?彼が出した答えは「SPEED」 レーシングドライバーが速さを追求するように、私たちも速さを追求する!
現在、多くのシステムの開発では、速度が最優先されるのではなく、安定性、セキュリティ、再利用性などが最優先されることがよくあります。現在、デザイン パターンや開発アーキテクチャなどは、主にパフォーマンスの問題を解決することを目的として設計されていません。上記は、アナリストとアーキテクトによって考慮されています。私たちのような小規模なプログラマーは、コード内のいくつかの小さな場所、クラス、メソッド、およびコード行でしかプログラムを最適化できません。細かい部分にも気を配った方が良いと思います。
さて、ナンセンスはこれくらいにして、今日のトピックについて話しましょう。現在開発されている多くのネットワーク システムのパフォーマンスのオーバーヘッドは、主にデータの読み取り速度と送信速度の高速化と、ネットワーク帯域幅の使用量の削減にあります。この側面から.netのパフォーマンスを向上させる方法について説明します。
1. データ層内のデータのページング。 ExcuteReader またはストアド プロシージャを使用して実装できます。詳細は説明しません (私が書いたものを参照してください)。2
. Microsoft の ExcuteReader を使用するのが最も効率的です。 PetShop 4.0 では、非接続用の特別な要件 (SmartClient など) がない限り、すべてのデータに ExcuteReader を使用してアクセスできます。
3. 接続されていない状況では、複数のリレーショナル テーブルを保存する場合を除き、DataTable を使用した方が DataSet を使用した場合よりもパフォーマンスが向上します。
4. DataTable の ImportRow メソッドを使用します。
場合によっては、ある DataTable から別の DataTable に大量のデータをコピーする必要がある場合、データの量が少ない場合でも、DataTable の ImportRow メソッドを使用すると、パフォーマンスが大幅に向上します。 10,000 行を超えると大幅に改善され、数倍に達する可能性があります。
5. 送信を容易にするために、データをバイナリ ファイルにシリアル化します。
DataSet オブジェクトと DataTable オブジェクトを処理するときに、それらを XML ファイルにシリアル化してネットワーク経由で送信する場合、XML ファイルによってメモリやネットワーク帯域幅などのリソースの問題が発生します。このとき、バイナリ ファイルにシリアル化すると、生成されるファイルが大幅に削減されます。コードは次のとおりです。
FileStream fs = new fileStream(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = 新しい BinaryFormatter();
bf.Serialize(fs,XMLData);
fs.colse();
この方法で生成されたバイナリ ファイルは XMLBinary と呼ばれ、WINHEX で直接開くと、その中にいくつかの XML タグが表示されます。データ量が多い場合は、次のコード行を追加します。
XMLData.RemortingFormat = SerializationFormat.Binary;
このときに生成されるファイルは TrueBinary ファイルと呼ばれます。大量 (10,000 行以上) を処理する場合、生成されるファイル サイズは XMLBinary の数分の 1 になります。スキーマはシリアル化中に自動的に保存されるため、シーケンス解除プロセスが簡単になります。 XML を直接読み取る場合と比較して、逆シリアル化によるパフォーマンスの低下がどの程度になるかはまだわかりません。
6. 接続プールを合理的に使用します。
接続プーリングはパフォーマンスの向上に大きな役割を果たしており、デフォルトでオンになっています。デフォルトの最小プール サイズは 0 ですが、通常は 5 などの比較的小さい値に設定されます。デフォルトの最大プール サイズは 100 で、ほとんどの WEB サイトには十分です。大規模なサイトの場合は、適切に増加してください。
7. SQLCLRを使用した開発
SQL Server シリーズを開くことに重点を置いている場合は、SQLCLR を学習する必要があります。SQLCLR は非常に強力で、多くの状況 (特に大規模なエンタープライズ レベルのアプリケーション) でパフォーマンスを向上させることができます。
8. 静的クラスを介して APP.Config/Web.Config にアクセスする
APP.Config/Web.Config には多くの構成情報があり、非常に頻繁にアクセスされるため、すべての属性は静的クラスを介してアクセスされ、ある程度のパフォーマンスが向上します。静的クラスのみ Config を 1 回インスタンスすると、APP.Config/Web.Config は大量の IO 操作を生成します。
パブリック静的クラス MyWebConfig
{
静的 MyWebConfig()
{
ConnString =
ConfigurationManager.ConnectionStrings["接続"]。
接続文字列;
}
パブリック静的文字列 DbConnectionString
{
得る
{
ConnString を返します。
}
}
}
さて、今日はここまでです。間違いや欠点を指摘して、一緒に改善していきましょう。