> 백엔드 개발 > C++ > C# 개체의 바이트 크기를 어떻게 예측할 수 있습니까?

C# 개체의 바이트 크기를 어떻게 예측할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2025-01-10 15:37:47
원래의
280명이 탐색했습니다.

How Can I Estimate the Byte Size of C# Objects?

C# 객체 인스턴스 바이트 크기 추정

질문:

객체 인스턴스(컬렉션, 조합 및 개별 객체 포함)의 크기를 결정하는 것은 객체 크기를 관리할 때 일반적인 작업입니다.

해결책:

공식적인 방법은 없지만 리플렉션과 문서화되지 않은 .NET 내부를 활용하여 개체 크기를 추정할 수 있습니다.

<code class="language-csharp">object obj = new List<int>();
RuntimeTypeHandle th = obj.GetType().TypeHandle;
int size = *(*(int**) &th + 1);
Console.WriteLine(size);</code>
로그인 후 복사

설명:

  • RuntimeTypeHandle 유형의 내부 표현에 대한 액세스를 제공합니다.
  • 포인터 작업을 통해 기본 인스턴스 크기 필드를 검색하여 객체 크기를 추정할 수 있습니다.
  • 컬렉션과 복잡한 객체의 경우 포함된 요소의 크기를 재귀적으로 추정해야 할 수도 있습니다.

제한사항:

  • 이 방법은 문서화되지 않은 내부 메커니즘을 사용하며 향후 .NET 업데이트의 영향을 받을 수 있습니다.
  • 모든 유형(예: 배열, 문자열 또는 StringBuilder)의 개체 크기를 정확하게 반영하지 못할 수 있습니다.
  • 실제 메모리 사용량은 추정치만 제공합니다.

확장 방법:

편의를 위해 Object 클래스에 확장 메서드를 구현하여 크기 검색을 단순화하는 것을 고려할 수 있습니다.

<code class="language-csharp">public static int GetEstimatedByteSize(this object obj)
{
    RuntimeTypeHandle th = obj.GetType().TypeHandle;
    return *(*(int**) &th + 1);
}</code>
로그인 후 복사

이 확장 방법은 주의해서 사용해야 하며 모든 유형과 시나리오에서 정확성이 보장되지는 않습니다.

위 내용은 C# 개체의 바이트 크기를 어떻게 예측할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿