使用WebClient下载数据时,每次解析代理时似乎都会产生一些轻微但可感知的延迟。因为我需要在不同的线程中多次使用webclient调用方法,而webclient本身不是线程安全的,我想的是每次只创建一个新的webclient并将其代理设置为预先初始化的IWebProxy
但IWebProxy是否是线程安全的,所以我可以做到这一点并且有可能有更好的方法吗?
答案 0 :(得分:0)
如果您在.NET中看到代理查找导致性能下降,请参考以下几种方法:
WebProxy
对象,而不是依赖.NET来使用Web代理自动发现,这可能会导致您看到的速度变慢。这在服务器方案中是可行的,例如,您可以将代理服务器放在配置文件中而忘记它。在您不提前知道代理的客户端应用程序中,它是不可行的。 WebProxy
对象,并在每个interace方法和属性周围放置一个lock(this){ }
。如果您事先无法知道代理或设置特定代理对您的性能问题没有帮助,请执行此操作。 更多信息:
接口(如IWebProxy)既不是线程安全的,也不是线程不安全的。它们下面的实现(如WebProxy类)决定了线程的安全性。
也就是说,WebProxy不是线程安全的。根据{{3}}:
BTW,以上(静态是线程安全的,实例方法/属性不是)对于.NET Framework中的几乎所有类来说通常都是正确的。因此,除非您看到文档说实例方法是线程安全的,否则您应该假设实例方法/属性不是线程安全的。线程安全
任何公共静态(在Visual中共享) 基本)这种类型的成员是线程 安全。任何实例成员都不是 保证是线程安全的。