0

Я понимаю, что потоки .net довольно тяжелые, потребляя ~ 1 МБ памяти каждый (в основном для стека). Теперь, если это был пользовательский класс .net, я знаю, что он, скорее всего, поместит большую часть памяти в LOH. Однако, поскольку это основной класс, мне интересно, что такое поведение.Как память управляется для потока?

Причина этого вопроса заключается в том, что в настоящее время я занимаюсь профилированием памяти (потенциально долговечным) приложением, и, похоже, происходит медленная утечка. Я заметил, что VS показывает 33 потока (в разных состояниях, включая остановленные). Мне интересно, может ли экономное использование потоков быть фрагментацией памяти (наряду с несколькими LOH DTO).

+0

Как вы профилируете? Какой инструмент вы используете? Это похоже на догадки ... догадки - это не способ отладки утечки памяти. Если у вас есть профилировщик, профиль с ним - не должно быть никакой двусмысленности относительно того, откуда вытекает утечка (если она вообще существует). –

+0

@J ... Я знаю. Это догадки, поэтому я прошу предоставить дополнительную информацию. Я не сказал, что я ИДЕНТИФИЦИРОВАЛ ИСТОЧНИК как нить, я прошу МОЖЕТ БЫТЬ ПОТОМУ ЧТОБЫ РЕЗЬБЫ. Что касается профилирования, я использую ANTS 7. Что не дает мне ЛЮБОЙ информации об использовании памяти в потоках. – Aron

+0

Несомненно. Удержание экземпляра должно показать вам все, что коренится. Используете ли вы собственный код (внешние библиотеки DLL и т. Д.?). Это C# или VB.NET или что-то еще? –

ответ

2

Стек потока не сохраняется на LOH, потому что стек не является объектом CLR. Стек потока выделяется операционной системой, когда .NET запрашивает новый поток.

Потока CLR представляет собой тонкую обертку вокруг резьбы операционной системы.

Если у вас действительно есть утечка памяти, вы можете быть уверены, что это не в самих объектах нити.