3

私のクライアント側コードは、昔ながらの .asmx Web サービスを呼び出します。パフォーマンスを向上させるために、bin/release フォルダーで実行される次のコマンドを使用して、シリアル化アセンブリを事前に生成しました。

for %%a in (*.dll) do sgen /assembly:%%a

基本的に、すべての .dll ファイルをループしてそれらを呼び出しsgen /assembly:foo.dllます。このコマンドの後、各アセンブリには foo.XmlSerializers.dll アセンブリがあります。

ただし、コードをプロファイリングすると、コードにまだパフォーマンス ヒットがあり、シリアル化アセンブリがコンパイルされていることがわかります (ProcMon によって検証されたように、事前に生成されたアセンブリは完全に無視されます)。

ここに画像の説明を入力

事前に生成されたシリアル化アセンブリを使用しないのはなぜですか?

4

1 に答える 1

0

ファイルのロードを試み.XmlSerializers.dllますが、何らかの理由で失敗し、代わりに再生成します。アセンブリと同期していない可能性があります。

app.configこれをファイルに追加してみてください:

<configuration>
    <system.diagnostics> 
        <switches> 
            <add name="XmlSerialization.PregenEventLog" value="1" /> 
        </switches> 
    </system.diagnostics>
</configuration>

これにより、ジェネレータは発生したエラーをイベント ログに出力します。

詳細: XmlSerializers、ModuleVersionId、ILMerge、および You - Bits in Motion (ブログ)


この SO の質問にも興味があるかもしれません:ビルドの一部として Xml シリアル化アセンブリを生成する

于 2012-06-29T15:37:29.427 に答える