我有一个使用WCF的服务。在内部,它有一个带有列表的字典,您可以从不同的端点添加或获取其子集。
代码类似于这样:
List<Data> list = null;
try
{
locker.EnterReadLock();
list = internalData[Something].Where(x => x.hassomething()).ToList();
}
finally
{
locker.ExitReadLock();
}
foreach (var y in list)
{
result[y.proprty1].Add(y.property2); // <-- here it hangs
}
return result;
所有操作都使用ReaderWriterLockSlim锁定内部数据,读取使用readerlock,添加使用writerlock。我在锁定内部的项目后复制这些项,并在稍后对其进行操作。
问题是一段时间后,越来越多的CPU核心占用率达到100%,最终使用所有核心。它可以完美运行数天和数百万次调用,然后停止。
连接调试器并暂停显示一个线程挂起以在结果字典中添加内容。但是一旦恢复,所有线程都将继续运行并释放大量内存。
当调试器附加,暂停和恢复时,是否发生了类似于此类问题的释放?