我正在实现一个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。那怎么办呢?我期望删除对变量分配服务方法的响应会有所帮助,但这是一个问题,因为我需要查看每个响应的大小。我想在每次迭代后寻找某种即时和保证的内存清理。
答案 0 :(得分:1)
重构逻辑以尽可能多地重用现有对象,从而提供运行更多客户端的能力。经过一段时间后,垃圾收集变得非常慢但性能可以接受。