0

私は非常に大きなアプリケーションを持っており、100個までの異なるクラスをXMLにシリアル化します。実行時にXMLシリアライザーを作成するには時間がかかるため、アプリケーションのロード中に最も重要なクラスに対してこれを実行します。他のものについては、必要に応じて。

パフォーマンスを向上させるために、作成したシリアライザーをどうにかして永続化することを考えていました。

その問題をグーグルで検索しているときに、Microsoftツール「sgen.exe」を使用する方法を見つけました。これにより、私が理解している限り、指定されたアセンブリ内にあるタイプのすべてのシリアライザーを保持するアセンブリを作成できます。

私のアセンブリでそれを行おうとしたとき、すべてのアセンブリ(およびそれによって使用されるすべて)に署名する必要があることに気づきました。先に進んで多くの署名ファイルを作成し、すべてのプロジェクトでそれを開始する前に、何かを見逃していないことを確認したいだけです。

最後に、私の質問があります。アプリケーションが実行される前にXMLシリアライザーを使用できるようにしたい場合は、この方法でしょうか。

それらをdllに保存することが「唯一の方法」だと思いますが、それらを作成する方法は私には非常に複雑に思えます。どういうわけか、必要なすべてのタイプのシリアライザー(リスト)のリストをバイナリシリアル化して、起動時にロードし、最後にフレームワークに代わりに使用するように指示することはできませんか?

よろしく

4

1 に答える 1

0

シリアライザーの作成は確かに遅いです。当然のことですが、シリアライザーを作成するということは、型を反映し、実行時に(IL)コードを生成することを意味します。sgenを使用するのが方法です。同じことを行いますが、ビルド時に実行し、そのコードをディスク上のアセンブリに保存するため、実行時に生成する必要はありません。

シリアライザーのコードをバイナリシリアル化(コードではなくデータに使用できます)でシリアル化することはできません。実際、コードはもちろんディスクやアセンブリに保存できます。それがまさにsgenが行うことです。

シリアル化可能な型を含むアセンブリに署名することをお勧めしますが、それはすべてのアセンブリに署名する必要があるという意味ではありません。シリアライズ可能なタイプを別のdllに入れて、その1つだけに署名するだけです。

于 2012-06-13T16:33:20.890 に答える