データセットのシリアル化とリモート処理のパフォーマンスの向上

文書翻訳 文書翻訳
文書番号: 829740 - 対象製品
すべて展開する | すべて折りたたむ

概要

この資料では、大規模な .NET Framework System.Data.DataSet クラスでのパフォーマンスの最適化について説明し、サンプルのシリアル化ラッパー クラスを提供します。これは、大きな DataSet クラスのシリアル化および逆シリアル化をより効率的に行うように最適化されています。

詳細

プロセス間で System.Data.DataSet オブジェクトを渡すときは、.NET Framework のリモート処理で DataSet クラスのシリアル化、転送、逆シリアル化が行われます。DataSet クラスを .NET Web サービスから返すとき、データセットのデータは内部的に Microsoft .NET Framework の System.Xml.Serialization.XMLSerializer クラスでシリアル化されてからクライアントに渡されます。 COM+ でホストされているマネージ オブジェクトからデータセットを返すときは、.NET Framework のリモート処理によって BinaryFormatter クラスが使用されます。.NET Framework がどのリモート機構を使用するかに関係なく、DataSet クラスはデータをシリアル化する際に内部データを常に XML に変換します。

Microsoft .NET Framework 1.0 および .NET Framework 1.1 に含まれている DataSet クラスは、データセット内の小さなデータ (数百行規模) を .NET Framework のリモート処理でシリアル化する場合は効率的に動作します。このシリアル化機構は大きなデータセット (数千行規模) では効率的でなく、一時 (短期) メモリの割り当てを多数発生させます。これらのメモリ割り当てのためにアプリケーションのスケーラビリティが低下します。

: 一時メモリ割り当てとは、コードのある区間を処理している間に生じる短期的なメモリ割り当てのことです。たとえば、シリアル化のとき、リモート処理のとき、または DataSet クラスの逆シリアル化のとき、リモート要求を処理するために .NET Framework のリモート処理では内部的にさまざまなマネージ オブジェクトを割り当て、またそれらの割り当てを解除します。 割り当ておよび割り当て解除の対象となるマネージ オブジェクトのサイズが大きいほど、.NET のメモリ管理システムにかかる負荷は大きくなり、全般的なスケーラビリティが低下します。たとえば、実行中にメソッドを多数呼び出して大量の一時メモリ割り当てを発生させるアプリーションでは、すべてのメソッド呼び出しが完了しないうちにメモリ不足が発生する可能性があります。

適切に設計されたサロゲートの型またはシリアル化ラッパー クラスを使用することで、大規模なデータセットのシリアル化とリモート処理のパフォーマンスを大幅に向上できます。.NET Framework の DataSet クラスでサロゲート機構とラッパー機構を使用する方法の詳細については、次の MSDN (Microsoft Developer Network) Web サイトを参照してください。
http://msdn.microsoft.com/msdnmag/issues/02/12/cuttingedge
なお、この資料ではデータセットのサロゲートの型やシリアル化ラッパー クラスの実装方法を示す完全なサンプルは提供しません。

この資料に掲載されているサンプルのシリアル化ラッパー クラスは、大規模なデータセットのシリアル化/逆シリアル化を効率的に行えるように最適化したものです。このクラスは、典型的なデータセットのリモート処理で一時メモリ割り当ての発生を大きく抑えます。一時メモリ割り当てが大幅に減少することで、エンド ツー エンドのリモート処理時間も短縮され、大規模なデータセットを使用するときのスケーラビリティが向上します。

このサンプルでは、DataSetSurrogate という名前のシリアル化ラッパー クラスを提供しています。DataSetSurrogate クラスは、リモート処理の対象となる任意のデータセットのラッパー クラスとして使用します。このサーバー コンポーネントは、必要なデータセットを DataSetSurrogate コンストラクタに渡し、その後、DataSetSurrogate クラスをクライアントに返します。クライアント側では、DataSetSurrogate.ConvertToDataSet メソッドを使用して DataSetSurrogate クラスからデータセットが抽出されます。

DataSetSurrogate クラスは Serializable とマークされており、DataSetSurrogate クラス内のすべてのフィールドもシリアル化可能なクラスです。したがって、DataSetSurrogate オブジェクトをリモート処理するときは、リモート処理のインフラストラクチャによって DataSetSurrogate オブジェクトとそのすべてのフィールドのシリアル化および逆シリアル化が自動的に行われます。シリアル化に関して DataSetSurrogate クラスが DataSet クラスよりも優れている点は、DataSetSurrogate クラスではデータをバイナリ形式でシリアル化することです。 バイナリ形式を使用したシリアル化は、データセットの現在の XML シリアル化形式よりもメモリと CPU の使用効率が大幅に高くなります。

: このシリアル化ラッパー クラスの効果を最大限引き出すため、リモート処理のとき .NET Framework の System.Runtime.Serialization.Formatters.Binary.BinaryFormatter クラスを使用してください。.NET Framework の System.Runtime.Serialization.Formatters.Soap.SoapFormatter クラスによるリモート処理は、DataSetSurrogate クラスを使用する場合にはあまり効率的でありません。

下記のファイルは、「Microsoft ダウンロード センター」からダウンロードできます。
元に戻す画像を拡大する
ダウンロード
SurrogateSample.exe パッケージ マイクロソフトのサポート ファイルのダウンロード方法を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
119591 オンライン サービスからマイクロソフトのサポート ファイルを入手する方法
マイクロソフトでは、アップロード時点の最新のウイルス検査プログラムを使用して、配布ファイルのウイルス チェックを行っています。配布ファイルはセキュリティで保護されたサーバー上に置かれており、権限のない第三者が無断でファイルを変更できないようになっています。

サンプル ファイルへのアクセス

SurrogateSample.exe ファイルをコンピュータの C ドライブに保存します。そこから、フォルダ構造を抽出できます。詳しい手順については、各フォルダの readme.txt ファイルを参照してください。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 829740 (最終更新日 2004-08-04) を基に作成したものです。

プロパティ

文書番号: 829740 - 最終更新日: 2005年9月2日 - リビジョン: 1.3
この資料は以下の製品について記述したものです。
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.1
キーワード:?
kbinfo kbdownload KB829740
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com