最小化WCF服务客户端内存使用情况

时间:2013-07-17 12:21:22

标签: c# .net wcf memory-management soap

我正在实现一个WCF服务客户端,旨在测试多种服务方法。这是通过使用Add Web Reference创建的标准生成的代理类完成的(继承自 System.Web.Services.Protocols.SoapHttpClientProtocol )。我需要做的是多次同时执行某些类型的请求,看看它将如何影响服务器性能(比如服务器基础架构的容量测试)。 这是问题 - 对这些请求的每个响应都非常大(~10-100 mb),我看到只有少数调用,如

// parametersList.Count = 5
foreach(var param in parametersList)
{
    var serviceResponse = serviceWebReferenceProxy.ExecuteMethod(param);
    // serviceResponse is not saved anywhere else,
    // expected to be GC'd after iteration
}

导致进程的私有字节跳转到~500 MB的内存和工作集为200-300 mb。我怀疑并行运行它们并且根据需要增加迭代计数到100-200肯定会导致StackOverflow / OutOfMemoryException。那怎么办呢?我期望删除对变量分配服务方法的响应会有所帮助,但这是一个问题,因为我需要查看每个响应的大小。我想在每次迭代后寻找某种即时和保证的内存清理。

1 个答案:

答案 0 :(得分:1)

重构逻辑以尽可能多地重用现有对象,从而提供运行更多客户端的能力。经过一段时间后,垃圾收集变得非常慢但性能可以接受。