wcf - 可以做些什么来加快同步 WCF 调用?

标签 wcf silverlight performance

我在 Silverlight 应用程序中对同步 WCF 调用的性能测量表明,我可以在 localhost 连接上每秒进行 7 次调用,这非常慢。这可以加快速度,还是正常的?

这是我的测试代码:

const UInt32 nrCalls = 100;
ICalculator calculator = new CalculatorClient(); // took over from the MSDN calculator example
for (double i = 0; i < nrCalls; ++i)
{
    var call = calculator.BeginSubtract(i + 1, 1, null, null);
    call.AsyncWaitHandle.WaitOne();
    double result = calculator.EndSubtract(call);
}

评论:
  • CPU 负载几乎为 0%。显然,WCF 模块正在等待某些东西。
  • 我在 Firefox 3.6 和 Internet Explorer 7 上都对此进行了测试。
  • 我正在使用 Silverlight v3.0
  • 为了比较:我曾经用 C++ 编写过一个 IPC 库,并且类似的测试产生了大约 4000 次调用/秒。那是没有 HTTP 数据包包装器,但我不认为这会减慢速度。只是 7 次调用/秒非常慢。

  • 更新:我已经将客户端从 Silverlight 移植到 .NET,这解决了性能问题。在该测试中,同步调用以 140 次调用/秒(而不是 7 次调用/秒)进行,异步调用以 200 次调用/秒(而不是 16 次调用/秒)进行。显然,缓慢是 Silverlight 平台固有的。我必须学会忍受它。

    最佳答案

    不是很多。您会遇到进行 100 个 http 调用的问题,这需要时间。你这位女士不要每次都生成一个新客户来搞砸它......所以,对不起。

    一般来说,这是一个不好的例子(或者:一个很好的例子,表现出不好的做法)。服务应该始终是粗粒度的,以避免调用开销。通常,服务应该在其所做的事情上具有一定的“权重”。

    例如,计算器可以接受一组运算,因此可以一次发送所有 100 个计算。

    在设计自己的界面时请记住这一点。

    关于wcf - 可以做些什么来加快同步 WCF 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2407418/

    相关文章:

    .net - 在 wcf 客户端中动态设置端点地址(使用 net tcp 绑定(bind))

    wpf - 依赖属性的 XML 文档

    Silverlight 在对象图中使用循环序列化对象

    c - 计算每个像素8-邻接最大像素灰度值的最快方法

    c# - 在 WCF 数据服务应用程序中迁移 EntityFramwork 6 和 VS 2013 后无法更新或删除

    c# - WCF 无法从传输连接读取数据

    .net - Silverlight 支持的编解码器

    javascript - PHP 跨页面传递数据

    c - 在 C 中初始化数组 - 执行时间

    c# - 如何配置 WebService 返回 ArrayList 而不是 Array?