我从这个网站下载了Reactive Extensions v1.0 SP1的稳定版本http://msdn.microsoft.com/en-us/data/gg577610,并且我正在.Net Framework 3.5环境(Visual Studio 2008)中使用它
我试着在一个项目中使用反应式扩展,发现它启动起来很慢。转到LinqPad,我输入了以下"C#表达式":
(new int[0]).ToObservable()
我还引用了System.Reactive.dll并导入了System.Reactive.Linq命名空间。当我运行它时,编译&跑
我打开进程监视器并监视LinqPad。我发现它正在向124.155.222.226或124.155.22.59发送HTTP请求。(仅供参考,当你打开LinqPad时,它本身也会打电话给157.55.161.150)。使用WireShark,我注意到它正在向发送HTTP GET请求
http://crl.microsoft.com/pki/crl/products/MicCodSigPCA_08-31-2010.crl
有人知道当代码使用Reactive.Extensions编译时,它为什么会这样打电话回家吗?此外,有没有什么方法可以关闭它,因为在应用程序降级(在生产中运行)时,延迟12秒给家里打电话特别不方便。
注意:当你编译代码时(或者JIT在调试时编译它),它会像这样打电话回家。实际上并不是运行时行为在起作用。
听起来Rx程序集是Authenticode签名的。IMO,对为Framework 3.5或更早版本构建的.NET程序集进行Authenticode签名是错误的,因为CLR在读取程序集之前会检查证书吊销列表,最多会延迟几秒(如果Internet连接超时,最坏情况下会延迟30秒)。
CLR 4中修复了此错误功能:只有在需要时才验证验证码签名,而不是每次加载程序集时都验证。
(正是因为这个原因,Framework 3.5版本的LINQPad可执行文件没有经过Authenticode签名。)
也许您可以要求Rx团队考虑从3.5版本的Reactive程序集中删除Authenticode签名(假设这确实是问题所在)。