[C#] 프로그래밍에서 관리 또는 관리되지 않는 코드 란 무엇입니까?

C # 코드에서 특정 명령을 사용하고 있습니다. 그러나 “관리되지 않는”코드에서 잘못 작동한다고합니다.

관리 또는 관리되지 않는 코드 란 무엇입니까?



답변

관리되지 않는 코드 에 대한 MSDN의 일부 텍스트는 다음과 같습니다 .

일부 라이브러리 코드는 관리되지 않는 코드 (예 : Win32와 같은 기본 코드 API)를 호출해야합니다. 이는 관리 코드의 보안 경계 외부로 나가는 것을 의미하므로주의해야합니다.

관리 코드에 대한 다른 무료 설명은 다음과 같습니다.

  • CLR에 의해 실행되는 코드입니다.
  • .NET Framework의 기초 인 공용 언어 런타임을 대상으로하는 코드를 관리 코드라고합니다.
  • 관리 코드는 CLR에 필요한 메타 데이터를 제공하여 메모리 관리, 언어 간 통합, 코드 액세스 보안 및 자동 객체 수명 제어와 같은 서비스를 제공합니다. IL 기반의 모든 코드는 관리 코드로 실행됩니다.
  • CLI 실행 환경에서 실행되는 코드입니다.

문제의 경우 :

NUnit이 UnitTesting을 위해 코드를 실행하고 관리되지 않는 부분이있을 수 있다고 생각합니다. 그러나 나는 그것에 대해 확신하지 못하므로 금으로 가져 가지 마십시오. 누군가가 당신에 대해 더 많은 정보를 줄 수 있다고 확신합니다. 그것이 도움이되기를 바랍니다!


답변

이것은 주제에 관한 좋은 기사입니다.

요약,

  1. 관리 코드 는 머신 코드로 컴파일되지 않고 머신의 일부 서비스에서 해석되고 실행되는 중간 언어로 컴파일되므로 메모리 및 스레드와 같은 위험한 항목을 처리하는 안전한 프레임 워크 내에서 작동합니다. 현대의 사용에서 이것은 종종 .NET을 의미하지만 반드시 그런 것은 아닙니다.

동일한 머신에 설치된 런타임 엔진 내에서 실행되는 애플리케이션 프로그램입니다. 응용 프로그램이 없으면 응용 프로그램을 실행할 수 없습니다. 런타임 환경은 프로그램이 사용하고 일반적으로 메모리 관리를 수행하는 일반 소프트웨어 루틴 라이브러리를 제공합니다. 또한 소스 코드에서 실행 코드로 또는 중간 언어에서 실행 코드로 JIT (just-in-time) 변환을 제공 할 수 있습니다. Java, Visual Basic 및 .NET의 CLR (공용 언어 런타임)은 런타임 엔진의 예입니다. ( 더 읽기 )

  1. 비 관리 코드 는 기계어 코드 로 컴파일되어 OS에서 직접 실행됩니다. 따라서 관리되는 코드가 수행하지 않는 강력한 작업을 수행 할 수 있습니다. 이것은 모든 것이 작동하는 방식이므로 일반적으로 .dll과 같은 오래된 것들과 관련이 있습니다.

자체적으로 실행되는 실행 프로그램. 운영 체제에서 시작된 프로그램은 운영 체제의 소프트웨어 루틴을 호출하고 사용하지만 다른 소프트웨어 시스템을 사용할 필요는 없습니다. 특정 플랫폼을위한 기계 언어로 조립 및 C / C ++ 프로그램을 기계어로 컴파일 된 어셈블리 언어 프로그램은 관리되지 않는 코드의 예입니다. ( 자세히보기 )

  1. 네이티브 코드는 종종 관리되지 않는 것과 동의어이지만 동일하지는 않습니다.

답변

비 관리 형 을 생각할 때는 기계 별 기계 수준 코드를 생각하십시오. x86 어셈블리 언어와 같습니다. 관리되지 않는 (네이티브) 코드는 컴파일되고 링크되어 현재 설계된 모든 프로세서를 제외하고 설계된 프로세서에서 직접 실행됩니다. 휴대용이 아니지만 빠릅니다. 매우 간단하고 제거 된 코드입니다.

관리되는 코드는 Java에서 기존 Interpretive BASIC 또는 .NET에서 실행되는 모든 것입니다. 관리 코드는 일반적으로 중간 레벨 P- 코드 또는 바이트 코드 세트로 컴파일됩니다. 이 지침은 어셈블리 언어와 비슷하지만 기계 별 지침은 아닙니다. 관리 코드는 프로그램이 실행되는 시스템에서 프로그램을 격리하고 모든 메모리가 간접적으로 할당되는 안전한 경계를 만들고 일반적으로 포트, 메모리 주소 공간, 스택 등과 같은 시스템 리소스에 직접 액세스 할 수 없습니다 보다 안전한 환경에서 실행하는 것이 좋습니다.

관리되는 변수를 관리되지 않는 변수로 변환하려면 실제 개체 자체에 도달해야합니다. 추가 포장으로 포장되거나 포장되어있을 수 있습니다. 32 비트 시스템에서 관리되지 않는 변수 (예 : ‘int’와 같은)는 정확히 4 바이트를 사용합니다. 오버 헤드 또는 추가 패키징이 없습니다. 관리되는 코드에서 관리되지 않는 코드로 돌아가는 과정을 ” 마샬링 “이라고합니다. 프로그램이 경계를 넘을 수 있습니다.


답변

가능한 한 적은 단어로 :

  • 관리 코드 = .NET 프로그램
  • 비 관리 코드 = “정상”프로그램

답변

관리 코드는 C # .Net, VB.Net, F # .Net 등 컴파일러가 생성하는 것입니다. CLR에서 실행되며 가비지 수집 및 참조 확인 등과 같은 서비스를 제공합니다. 내 코드는 CLR에 의해 관리되는 것으로 생각하십시오.

반면에 관리되지 않는 코드는 기계 코드로 바로 컴파일됩니다. CLR에서는 관리하지 않습니다.


답변

기본적으로 관리되지 않는 코드는 .NET CLR (VB.NET, C # 등이 아님)에서 실행되지 않는 코드입니다. 내 생각 엔 NUnit에는 .NET 코드 (일명 C ++)가 아닌 러너 / 래퍼가 있습니다.


답변

관리 코드 :
공용 언어 런타임과 “협력 계약”하에서 실행 되는 코드 입니다. 관리 코드는 메모리 관리, 언어 간 통합, 코드 액세스 보안 및 자동 객체 수명 제어와 같은 서비스를 제공하기 위해 런타임에 필요한 메타 데이터를 제공해야합니다. MSIL (Microsoft Intermediate Language)을 기반으로하는 모든 코드는 관리 코드로 실행됩니다.

관리되지 않는 코드 :
공용 언어 런타임의 규칙 및 요구 사항에 관계없이 만들어진 코드입니다. 관리되지 않는 코드는 최소한의 서비스 (예 : 가비지 수집 없음, 디버깅 제한 등)로 공용 언어 런타임 환경에서 실행됩니다.

참조 : http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx