11

我从这个站点http://msdn.microsoft.com/en-us/data/gg577610下载了 Reactive Extensions v1.0 SP1 的稳定版本,我在 .Net Framework 3.5 环境中使用它(Visual Studio 2008)

我尝试在一个项目中使用 Reactive Extensions,发现它启动起来很慢。转到 LinqPad,我输入了以下“C# 表达式”:

(new int[0]).ToObservable()

我还引用了 System.Reactive.dll 并导入了 System.Reactive.Linq 命名空间。当我运行它时,编译和运行需要12 秒。

我打开了进程监视器并监视了 LinqPad。我发现它正在向 124.155.222.226 或 124.155.22.59 发送 HTTP 请求。(仅供参考,当您打开 LinqPad 时,它本身也会给 157.55.161.150 打电话)。使用 WireShark,我注意到它正在向

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 在读取程序集之前会检查证书吊销列表,最多会延迟几秒钟(如果您的 Internet 连接最坏则延迟 30 秒)超时)。

此错误功能已在 CLR 4 中修复:仅在需要时验证 Authenticode 签名,而不是在每次加载程序集时验证。

(正是由于这个原因,LINQPad 可执行文件的 Framework 3.5 版本没有经过 Authenticode 签名。)

也许您可以要求 Rx 团队考虑从反应式程序集的 3.5 版本中删除 Authenticode 签名(假设这确实是问题所在)。

于 2012-08-24T02:06:54.067 回答