0

我正在实现一个 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。那怎么办呢?我希望删除将服务方法响应分配给变量会有所帮助,但这是一个问题,因为我需要查看每个响应的大小。我正在寻找某种即时且有保证的每次迭代后的内存清理。

4

1 回答 1

1

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

于 2013-08-23T09:03:34.673 回答