2009-05-29 57 views
18

私は.net 2.0 c#ClickOnceアプリを持っており、Webサービス経由でそのデータに接続します。アプリケーションを高速化する方法の1つは、事前にシリアル化アセンブリを生成することだと言われてきました。私はこの正面にいくつか質問があります。シリアル化アセンブリ。それは必要かどうか?

  1. シリアル化アセンブリを生成するかどうかの既定の設定は[自動]です。 VS2005は、シリアライゼーションアセンブリを生成するかどうかを決定するために、どの基準を使用しますか?デバッグ設定では生成されないようですが、リリース設定の下では実行されますが、どこにも情報を表示することはできません。

  2. シリアル化アセンブリは、実際にアプリケーションの起動を改善しますか?具体的には何が改善するのでしょうか?実際にシリアル化アセンブリが必要ですか?

答えて

13

それが本当に求めている「私が展開プロジェクトでそれをシリアル化アセンブリを事前に生成し、含まなければならないか、私はその場でアセンブリを生成するデフォルトに頼るもの?」一般的には、最初のヒット後にあまりにも痛いことはありません。それが再生できる場所は、シリアル化アセンブリが%SYSTEMROOT%\TEMPで生成されるということです。プロセスによってはアクセスできない場合があり、ほとんどの場合、致命的な例外が発生します。

4

ほとんどの場合、特にこのアプリをしばらく開いておくと、大きなメリットが得られない可能性があります。シリアライゼーションアセンブリの事前生成は、主にの最初の(exe lifetimeで)特定の型をxmlとしてシリアル化するのに役立ちます。

6

これはあなたの状況には関係ありませんが、シリアル化アセンブリの事前生成には別の理由があります。これはSQL Serverでコードをホストするときに必要です(SQLCLRなど)。 SQL Serverでは、これらのアセンブリを動的に生成できないため、SQL Server内でシリアル化コードが失敗する可能性があります。

1

Intellitraceによると、タイプを初めてXMLシリアル化するときだけ、FileNotFoundExceptionがスローされてキャッチされます。つまり、CLRは、その特定のアセンブリのすべてのXMLシリアライザを含むアセンブリをロードすることを意味し、見つからない場合、XmlSerializerに「File ...」というシグナルを送るためにFileNotFoundExceptionがスローされます。これは "Catch"の間に起こり、以前に見つからなかったファイルが存在します。

ロジックのtry-catchを使用するのは悪い練習です。 Microsoftがこのアプローチを使用した理由をIDK ...

関連する問題