线程挂起,直到我附加调试器

时间:2017-08-11 08:42:57

标签: c# multithreading wcf

我有一个使用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锁定internalData,使用readerlock进行读取,使用writerlock进行添加。我复制了锁中的项目,稍后再处理这个副本。

问题是过了一段时间,越来越多的cpu核心达到100%,最后使用所有核心。它可以在停止之前完美运行数天和数百万次通话。

附加调试器和暂停显示添加到结果字典时会出现问题。但是一旦我恢复,所有线程都将继续,并且正在释放大量内存。

附加调试器时是否会发生特殊情况,暂停和恢复将释放这样的内容?

1 个答案:

答案 0 :(得分:0)

我将锁更改为锁定(某些){code ...}并且挂起的问题消失了。所以看起来lilke我遇到了Steffen Winkler在他的评论中指出的问题。 http://joeduffyblog.com/2007/02/07/introducing-the-new-readerwriterlockslim-in-orcas/