方法 : XmlSerializer を使用する WCF クライアント アプリケーションの起動時間を短縮する
XmlSerializer を使用してシリアル化できるデータ型を使用するサービスおよびクライアント アプリケーションは、実行時にこのようなデータ型のシリアル化コードを生成およびコンパイルします。このため、起動時のパフォーマンスが低下することがあります。
メモ : |
---|
事前生成済みシリアル化コードはクライアント アプリケーションでのみ使用できます。サービスでは使用できません。 |
ServiceModel Metadata Utility Tool (Svcutil.exe) を使用すると、必要なシリアル化コードをアプリケーションのコンパイル済みアセンブリから生成することで、このようなアプリケーションの起動時のパフォーマンスを改善できます。Svcutil.exe は、XmlSerializer を使用してシリアル化できるコンパイル済みアプリケーション アセンブリに格納されたサービス コントラクトで使用されるすべてのデータ型に対して、シリアル化コードを生成します。XmlSerializer を使用するサービスおよび操作コントラクトは、XmlSerializerFormatAttribute でマークされます。
XmlSerializer シリアル化コードを生成するには
サービスまたはクライアント コードを 1 つ以上のアセンブリにコンパイルします。
SDK コマンド プロンプトを開きます。
コマンド プロンプトで、次の形式を使用して Svcutil.exe ツールを起動します。
svcutil.exe /t:xmlSerializer <assemblyPath>*
assemblyPath
引数には、サービス コントラクト型を格納するアセンブリへのパスを指定します。Svcutil.exe は、XmlSerializer を使用してシリアル化できるコンパイル済みアプリケーション アセンブリに格納されたサービス コントラクトで使用されるすべてのデータ型に対して、シリアル化コードを生成します。Svcutil.exe は、C# のシリアル化コードのみを生成できます。入力アセンブリごとに、1 つのソース コード ファイルが生成されます。生成されるコードの言語を変更するために、/language スイッチを使用することはできません。
依存アセンブリへのパスを指定するには、/reference オプションを使用します。
次のオプションのいずれかを使用して、生成したシリアル化コードをアプリケーションから利用できるようにします。
- 生成されたシリアル化コードを [元のアセンブリ].XmlSerializers.dll という名前 (たとえば、MyApp.XmlSerializers.dll) で別個のアセンブリにコンパイルします。アプリケーションがアセンブリを読み込むことができ、アセンブリが元のアセンブリと同じキーで署名されている必要があります。元のアセンブリを再コンパイルする場合は、シリアル化アセンブリも再生成する必要があります。
- 生成されたシリアル化コードを別個のアセンブリにコンパイルし、XmlSerializerFormatAttribute を使用するサービス コントラクトで XmlSerializerAssemblyAttribute を使用します。AssemblyName プロパティまたは CodeBase プロパティが、コンパイル済みのシリアル化アセンブリを指すように設定します。
- 生成されたシリアル化コードをアプリケーション アセンブリにコンパイルし、XmlSerializerFormatAttribute を使用するサービス コントラクトに XmlSerializerAssemblyAttribute を追加します。AssemblyName プロパティおよび CodeBase プロパティは設定しないでください。既定のシリアル化アセンブリが現在のアセンブリであると見なされます。
例
次のコマンドにより、アセンブリに含まれているサービス コントラクトが使用する XmlSerializer 型用のシリアル化型を生成します。
svcutil /t:xmlserializer myContractLibrary.exe