新的运算符或构造函数是否阻止.NET中的其他线程?

时间:2013-06-18 15:48:59

标签: c# .net multithreading constructor new-operator

我想知道调用构造函数是否会阻塞程序中的其他线程?我正在查看并发报告并发现一个长线程阻塞其他线程,它的堆栈总是有一个构造函数。

修改

经过调查,我发现锁是因为来自另一个请求的DB调用而发生的(我运行了一个ASP.NET应用程序)。

对于这个问题,正如我在article中发现的那样,内存分配不会阻塞线程,除非调用GC,正如Servy所指出的那样。

2 个答案:

答案 0 :(得分:3)

不,它没有。这个特定的构造函数可能正在做一些导致其他线程阻塞的东西,但是调用构造函数的行为本身并不会阻塞所有其他线程。

您可能会注意到的一件事是,垃圾收集器确实需要在运行时阻止所有线程的执行。如果你有一个分配批次和大量对象的线程,那么它导致GC集合超出了预期的范围,那么你可能会在很长一段时间内阻塞你的线程。

答案 1 :(得分:0)

一切都取决于具体情境。构造函数只是另一种方法,具有为您的实例构造(分配内存)的特殊任务。你可以在里面构建对象 另一个线程,或构造函数中的块线程,但它与构造函数本身无关。阻止是关于程序的流程