* [2.0]XMLSerializerの挙動について [#nead55d1]
.NET2.0から sgen.exe(XMLSerializerプリコンパイル生成ツール)が提供された。
使用して気づいたことを記載しておく。
** 使い方 [#zd6dda58]
//sgenを実行するには、vcvars32.batを実行してパスを通しておく
//デバッグ用
sgen /f /debug /a:.\bin\debug\foobar.exe
//リリース用
sgen /f /a:.\bin\release\foobar.exe
/f 上書き可能
/a: このアセンブリに含まれるすべての型のXMLSerializerを作成する
/debug デバッグ情報を含める
上記を実行すると、foobar.XmlSerializers.dll が生成される。
** 気づいたこと [#y59406c5]
-コードを変更する必要は無い。
-実行時、コード内にXML(De)Serializerのインスタンス作成があると、
--EXEと同じディレクトリに○○.XmlSerializers.dll があれば、そこから対応する型のプリコンパイル済みのアセンブリを読み出してインスタンス化されるようだ。
--もし無い場合は内部で「ファイルが存在しない」例外が発生し、そこから自動的に(.NET1.xと同じように)動的にコンパイルされ生成されるようだ。
-従って、プリコンパイルしておいた方が若干高速に動作すると思われる。
--しかし体感的にはあまり変わらない。
-XMLSerializerで使わない型までプリコンパイルしておくのは無駄っぽいが、/t を利用した場合は1つの型のみサポートされるため、プリコンパイルしておきたい型を複数指定することはできないようだ。
-プリコンパイルしておくことにより、日本語環境でXMLSerializerの動的コンパイルが凍る不具合(http://support.microsoft.com/default.aspx?scid=kb;ja;899153)が解消できるかどうかは不明である。
-そもそも上記不具合が、.NET2.0環境においても再現するかどうか定かでない。