【问题标题】:Best practice webservice client singleton最佳实践 web 服务客户端单例
【发布时间】:2013-10-04 13:44:10
【问题描述】:

我正在实现一个使用 Web 服务检索数据的 Web 应用程序。什么是最佳做法;

  • 将 Web 服务代理创建为单例一次,并将其用于所有 来电
  • 每次完成网络服务调用时,使用using(var p = new Proxy()) 创建代理

我注意到使用第二个选项时,每次第一次调用需要 +- 500 毫秒,而使用此客户端的下一次调用需要 +- 180 毫秒。

【问题讨论】:

  • 我会说代理作为单例更好,就像每次调用完成时都创建代理。
  • 有什么理由不应该使用单例代理吗?
  • 可扩展性;单例维护可能导致可伸缩性问题的状态,而每次调用则不会。访问管理;单例代理在多线程环境中使用时可能会导致问题,而每次调用则不会。

标签: c# web-services proxy singleton client


【解决方案1】:

我更喜欢第二种情况:

using(var p = new Proxy())
  • 在使用之外没有内存泄漏。对象被破坏
  • 更好地支持异常处理
  • 您可以异步使用它。
  • 您可以将其打包到一个库中并在多个项目中用作参考, 或在派生类中使用,不用担心会被破坏 在你永远的单一实例中。

【讨论】:

  • 但是性能呢?使用 using 语句为每个调用创建一个新的代理,使调用时间延长 300 毫秒。
  • 嗯,我猜这 300ms 只是在构建之后,或者这个 300ms 的差距一直在发生,CLR 没有优化这些调用?无论如何,这取决于您对代理的使用。如果你在循环中使用它,那么你应该使用一个实例。如果你不时使用它,处理一些罕见的用户请求,那么我不会关心 300 毫秒。无论如何,我建议您实施压力测试,看看您的代码在压力下的感觉如何。如果 300ms 间隔不影响结果,则使用 using。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2020-08-15
  • 2020-11-11
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多