对单个wcf服务进行多个并发调用的最佳方法

时间:2017-04-06 22:22:11

标签: c# multithreading wcf client

我制作的Windows应用程序必须处理大量数据(6MM或更多记录),并调用WCF服务。

为此,我使用Parallel.Foreach为服务制作多个连接。

我在app.config中有以下内容以允许多个连接到服务器:

  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100" />
    </connectionManagement>
  </system.net>

首先,我尝试使用以下代码:

Parallel.ForEach<ItemType>(list, (item, loopState) =>
{
    ServiceAClient client = new ServiceAClient();
    var data = GetDataFromDB(item);
    client.Process(data);
});

使用上面的代码,每秒处理大约40到50个项目,这很好,但内存一直在上升,直到它占用了所有系统内存并阻止了应用程序。

所以,我尝试使用计时器(45秒)一段时间后调用垃圾收集器。有了这个,GC.Collect()被调用后内存使用量减少了,但还不够快。我想更频繁地调用GC,但我知道这不是一个好主意,可能会在

中增加应用程序

所以,我改变了代码来处理客户端,看起来像这样

Parallel.ForEach<ItemType>(list, (item, loopState) =>
    {
        using(ServiceAClient client = new ServiceAClient())
        {
             var data = GetDataFromDB(item);
             client.Process(data);
        }
    });

在乞讨时一切正常,记忆没有开始增加并保持在同一水平,到目前为止一直很好,但过了一会儿(几分钟或几个小时),一切都开始变得非常缓慢每秒仅执行一项,但内存使用量仍然很低。

发生了什么事?关闭频道的开销是否会变慢?我应该使用单个客户端来拨打所有服务吗?那会限制服务的连接数量吗?

0 个答案:

没有答案