Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 垃圾回收时的本机线程行为_C# - Fatal编程技术网

C# 垃圾回收时的本机线程行为

C# 垃圾回收时的本机线程行为,c#,C#,当运行时启动垃圾回收时,它将挂起所有托管线程。。我的应用程序既有托管组件又有非托管组件。当运行时执行垃圾收集活动时,非托管代码中的本机线程可能会进入托管代码 net如何处理这个问题?net会挂起本机线程还是会发生其他情况?据我所知,托管线程挂起的原因是托管堆可能会在收集过程中被压缩。如果发生这种情况,则必须调整对托管对象的引用。我认为您的本机线程没有使用托管堆上的对象,因此不应该受到垃圾收集的影响 如果本机线程确实访问托管对象,则应锁定这些对象。这将防止GC在压缩期间移动对象 因此.ney不会在

当运行时启动垃圾回收时,它将挂起所有托管线程。。我的应用程序既有托管组件又有非托管组件。当运行时执行垃圾收集活动时,非托管代码中的本机线程可能会进入托管代码


net如何处理这个问题?net会挂起本机线程还是会发生其他情况?

据我所知,托管线程挂起的原因是托管堆可能会在收集过程中被压缩。如果发生这种情况,则必须调整对托管对象的引用。我认为您的本机线程没有使用托管堆上的对象,因此不应该受到垃圾收集的影响


如果本机线程确实访问托管对象,则应锁定这些对象。这将防止GC在压缩期间移动对象

因此.ney不会在garabage收集时挂起进入托管代码的本机线程。我的理解正确吗?@Maanu:我的理解是只有托管线程被挂起。SSCLI手册明确指出,只有托管线程被挂起,但无可否认,很难找到关于这一点的确切信息。@Maanu:如果GC正在进行,运行时将在转换回托管代码时挂起线程。@Maanu:抱歉,我误读了您的评论,没有真正解决您的问题。请看斯蒂芬的评论。