11

Reactive Extensions v1.0 SP1 の安定版リリースをこのサイトhttp://msdn.microsoft.com/en-us/data/gg577610からダウンロードし、.Net Framework 3.5 環境 (Visual Studio 2008) で使用しています。

プロジェクトで Reactive Extensions を使用してみましたが、起動が非常に遅いことに気付きました。LinqPad に移動して、次の「C# 式」を入力しました。

(new int[0]).ToObservable()

System.Reactive.dll も参照し、System.Reactive.Linq 名前空間をインポートしました。実行すると、コンパイルと実行に12秒かかります。

Process Monitor を開き、LinqPad を監視しました。HTTP リクエストを 124.155.222.226 または 124.155.22.59 に送信していることがわかりました。(FYI LinqPad 自体も、開いたときに 157.55.161.150 に電話をかけます)。WireShark で、HTTP GET リクエストを送信していることに気付きました

http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_08-31-2010.crl

コードが Reactive.Extensions でコンパイルされたときに、なぜこのように家に電話をかけているのか、誰かが知っていますか? さらに、アプリケーションを開発するとき(および本番環境で実行するとき)に電話をかけるまでの12秒の遅延は特に不便であるため、それをオフにする方法はありますか。

注: コードをコンパイルすると (または、デバッグ時に JIT によってコンパイルされます)、このように電話がかかってきます。これを実行しているように見えるのは、実際には実行時の動作ではありません。

4

1 に答える 1

7

Rx アセンブリが Authenticode 署名されているようです。IMO、Framework 3.5 以前用にビルドされた .NET アセンブリに Authenticode 署名するのは間違いです。CLR はアセンブリを読み取る前に証明書失効リストをチェックし、せいぜい数秒 (インターネット接続の場合は最悪でも 30 秒) 遅延させるためです。タイムアウト)。

この誤機能は CLR 4 で修正されました。Authenticode 署名は、アセンブリを読み込むたびではなく、オンデマンドでのみ検証されます。

(LINQPad 実行可能ファイルの Framework 3.5 バージョンが Authenticode 署名されていないのは、このためです。)

おそらく、Reactive アセンブリの 3.5 ビルドから Authenticode 署名を削除することを検討するよう Rx チームに依頼することができます (これが実際に問題であると仮定します)。

于 2012-08-24T02:06:54.067 に答える