0

나는 닷넷 쓰레드가 꽤 무겁고, 각각 1MB의 메모리를 소비한다고 생각한다. 자, 이것이 .net 클래스 사용자라면 LOS에 대부분의 메모리를 넣을 가능성이 있습니다. 그러나, 그것은 핵심 클래스이기 때문에, 나는 그 행동이 무엇인지 궁금합니다.스레드가 메모리를 어떻게 관리합니까?

이 질문의 이유는 현재 (잠재적으로 수명이 긴) 응용 프로그램을 메모리 프로파일 링하고 있기 때문에 느린 누수가있는 것 같습니다. 나는 VS가 33 개의 스레드를 보여주고 있다는 것을 알아 챘다. 스레드의 절약 된 사용이 메모리를 조각 낼 수 있는지 궁금합니다 (LOH DTO 몇 개와 함께).

+0

어떻게 프로파일 링합니까? 어떤 도구를 사용하고 있습니까? 어림짐작처럼 들리 겠지만 ... 추측은 메모리 누수를 디버그 할 수있는 방법이 아닙니다. 프로필러가 있으면 프로파일이있는 프로파일 링 - 누출이 어디에서 오는지에 대해 모호하지 않아야합니다 (존재하는 경우). –

+0

@J ... 알아. 그것은 추측이므로 더 많은 정보를 요구하고 있습니다. 나는 내가 스레드를 스레드로 식별했다고 말하지 않았으므로 스레드를 생성 할 수 있다고 생각합니다. 프로파일 링에 관해서는, ANTS 7을 사용하고 있습니다. 스레드의 메모리 사용량에 대한 정보는 제공하지 않습니다. – Aron

+0

분명히 그렇습니다. 인스턴스 보존은 당신에게 뿌리가 된 것을 보여 주어야합니다. 네이티브 코드 (외부 DLL 등)를 사용하고 있습니까? 이 C# 또는 VB.NET 또는 다른 것입니까? –

답변

2

스택이 CLR 객체가 아니기 때문에 스레드의 스택은 LOH에 저장되지 않습니다. 스레드의 스택은 .NET이 새 스레드를 요청할 때 운영 체제에 의해 할당됩니다.

CLR 스레드는 운영 체제 스레드 주위의 얇은 래퍼입니다.

메모리 누수가 실제로있는 경우 스레드 개체 자체에없는 것으로 확신 할 수 있습니다.