2009-05-14 4 views
3

C#에서 참조 형식의 크기를 찾는 방법이 있는지 궁금합니다. 나는 인터넷 검색을하고 포럼에 대한 일반적인 생각은 이것이 가능하지 않은 것 같다. 나는 너희들에게 물어볼 줄 알았는데 여기있는 누군가가 더 잘 알고 있는지 보았다.C# 참조 형식의 크기를 찾는 방법

결국 프로파일 링 도구에는이를 수행하는 방법이 있어야합니까? 나는이 정보를 알 필요가있는 것이 보통이 아니라는 것을 알고 있지만 어떤 상황에서는 유용 할 것입니다.

+2

나는 이것이 http://stackoverflow.com/questions/207592/getting-the-size-of-a-field-in-bytes-with-c#207605 –

+0

의 유효한 복제본이라고 생각합니다. 그렇지만 동의합니다. 나는이 질문에 대해 그렇게 수색했으며 어떤 결과도 찾을 수 없었다. (나는 아직 물어 보지 않았다는 사실에 놀라움을 금치 못했다.) 나는 질문이 가난하게 표제가 붙었다 고 말할 것입니다, 아마 아마 더 쉬운 수색을 위해 낙관되어야합니다. –

답변

1

확인 this detailed answer를 존에 의해, 당신은 몇 가지 유용한 정보를 찾을 수 있습니다.

+0

감사합니다 - 나는 그 질문을 찾으려고 노력하고 있었다! –

+0

사실 그것은 (일반적으로) 포괄적이며 맨 위 단락은 효과적으로이 질문을 부분 집합으로 만듭니다. 이에 근거하여 투표를 종료합니다. – annakata

0

대충 추정 할 수 있으며 profilig를 통해 사용 된 메모리를 추적 할 수 있어야합니다. 그러나 JIT는 프레임 워크 버전, 컴퓨터 구성 (특히 32 비트 대 64 비트), 프레임 워크 공급자 (MS, Mono, GNU.NET 등)에 가장 잘 맞는 형식의 레이아웃을 자유롭게 설정할 수 있습니다. 사전을 계산 등

이 유사 할 것이다 :

  • 참고 문헌에 포함 된 (플랫폼

  • 클래스 인스턴스의 타입 정보에 대한 내부 기준을 가지고에 따라 32 비트 또는 64 비트이다 VTable 등), 포함 된 각 참조 유형에 대한 참조 (문자열 또는 배열 포함), 메모리 어떤 구조체에 의해 사용된다. (이것들은 액세스가 효율적 이도록 배치 될 수 있으며, 실제로는 약간의 메모리가 사용되지 않는다.)

그래서 질문은, 또한 당신이 클래스 클래스 또는 사용하는 메모리 및 관련 데이터를 얻을 싶어 (분야 등 문자열, 배열,리스트, dictionatries 등)?

0

흠. 나는 프로파일 링 도구를 사용하는 것, 그러나 나는 이런 식으로 뭔가가 작동하지 않을 수 있습니다 같아요

long before = System.GC.GetTotalMemory(true); 
Foo instance = new Foo(); 
long after = System.GC.GetTotalMemory(true); 
long consumed = after - before; 
+1

투표가 실패한 이유는 무엇입니까? – user1068352

+0

새로운 빈 개체의 크기 만 측정하며 기존 개체의 실제 메모리 사용량은 반영하지 않습니다. 또한 멀티 스레드 솔루션에는 정확도 문제가있을 수 있습니다. – Alex

관련 문제