据我所知,.net线程非常重,每个内存消耗大约1MB(主要用于堆栈)。现在,如果这是一个用户.net类,我知道它可能会将大部分内存放入LOH。但是,由于它是一个核心类,我想知道这是什么行为。
这个问题的原因是因为我现在正在对一个(可能是长期存在的)应用程序进行内存分析,而且似乎有一个缓慢的泄漏。我注意到VS显示了33个线程(在各种状态下,包括停止)。我很想知道线程的节俭使用是否会破坏内存(以及一些LOH DTO)。
答案 0 :(得分:2)
线程的堆栈未存储在LOH上,因为堆栈不是CLR对象。当.NET要求新线程时,操作系统会分配线程的堆栈。
CLR线程是操作系统线程的瘦包装器。
如果确实有内存泄漏,可以确定它本身不在线程对象中。