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