当我在多线程应用程序中使用GC.GetTotalMemory(false)
时,它是否在通话期间同步所有线程?
也许有人有答案?据我所知,GC.Collect()
有这种行为。
修改
我想使用该方法来了解应用程序当前使用了多少内存。该方法在不同的线程中被调用,如果达到某个内存限制,将被取消。
谢谢!
答案 0 :(得分:1)
没有。这并没有多大区别。
任何正在运行的线程的结果都是相同的,因为它报告所有线程共享的资源,并且GC通常会进行足够的同步以确保其工作(例如,同时需要更多堆内存的两个线程不会把它扔进一个无效的状态)。查找想要分配的内存量不需要锁定所有线程,但可能需要锁定其他一些GC操作。
当然,获取大块内存的线程可能会在您获得它时收到的答案无效,但是如果所有线程都被锁定,那么仍然会出现这种情况,因为在锁定后它仍会获得那么大的块被释放了。