2009-04-27 5 views

답변

17

이것은 혼합입니다. winforms 같은 것들은 Win32 기능 (또는 두 가지 세계의 혼합)을 둘러싼 대부분 래퍼이지만 WPF는 실제 제어 코드 측면에서 훨씬 관리가 잘되며, Mash 메모와 같이 DirectX를 사용하여 표현). 마찬가지로, 파일/네트워크 액세스와 같은 것들은 OS 객체를 둘러싼 래퍼 (Mutex과 같은 관리되지 않는 잠금 객체)와 비슷하지만 많은 다른 것들은 100 % 관리됩니다.

그래서 간단한 대답이 아닙니다.

(편집) 또한 - ".NET"은 매우 모호한 용어입니다. Compact Framework, Micro Framework, Silverlight 등은 win32가 아닌 다른 구현이 가능합니다.

+3

내부적으로 WPF가 더 많이 관리되는지 여부는 논쟁의 여지가 있습니다. – Mash

+0

@Mash - 좋은 지적 –

+0

.NET은 주로 win32를 사용하여 작업을 완료하므로 절대로 "대체"할 수 없습니다. 기본 WINAPI, 맞습니까? 아니면 최종 목표입니까? – tyler

5

일부 경우 (대부분, 아마 전체 프레임 워크 전체에 반영되지 않았 음) .NET Framework에서 win32를 호출합니다. 대부분의 컨트롤은 몇 가지 새로운 기능으로 래핑 된 단순한 win32 컨트롤입니다.

6

.NET 응용 프로그램은 다른 Win32 프로세스이므로 마술은 없으며 분명히 밑줄 운영 체제를 사용하게됩니다. .NET 라이브러리조차도 Win32를 아주 많이 사용합니다.

예는 :

  • 메모리 관리는 관리 코드에 대한 내부 을 처리하지만, 의 과정 자체는 그냥 다른 Win32 프로세스 등이 처리됩니다.

  • 현재 관리되는 스레드는 OS 스레드로도 구현 된 입니다.

3

예, 내부적으로 win32 함수를 호출합니다.

return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read); 

을하고 결국 호출합니다 : : 예를 들어 파일 클래스의 OpenRead 방법은 포함 깊은 방법으로는 Win32 기본 기능입니다

SafeFileHandle handle = CreateFile(lpFileName, dwDesiredAccess, dwShareMode, securityAttrs, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); 

합니다.

1

모든 Windows 응용 프로그램 에서처럼 .NET API를 호출합니다. 그러나 단순한 래퍼 또는 맵 그 이상을 추상화로보다 정확하게 설명합니다.

6

업데이트 : 내가 틀린 질문에 대답했다는 것을 깨달았다. (당신은 클래스 라이브러리가 아닌 런타임이라고 말했다.) ... 오 잘 나는 어쨌든 아래의 guff를 유지할 것이다!

그것은 라이브러리의 부분에 따라 달라집니다

  • 에서 System.Xml 라이브러리 는하지 않습니다 사용 MSXML
  • 하는 System.Reflection 의지는 모든 IL 기반
  • 시스템 아니에요있다.텍스트는 그렇지 않습니다. 문자열 조작에 대한 '빠른'호출이 있습니다.
  • System.Text.RegularExpressions은 XML 네임 스페이스처럼 RegexRunner 내부 클래스를 사용하여 모든 사용자 정의입니다.
  • System.Diagnostics 네임은
  • System.IO 네임 스페이스는
  • 하여 System.Threading 어느 것 결국 호 WINAPI 방법 (CLR에 내부)
  • 시스템 내부 메소드 호출을 사용 PInvoke를 않도록하는 CreateProcess를 같은 kernel32.dll에서 호출을 사용한다. Windows.Forms이 혼합물 결국
  • System.Net GDI
  • (는 NetworkStream)를 사용하는 예와 WSARecv (...) 다만 리플렉터 하구로부터의

로 WS2_32.DLL를 이용한다. 분명히 COM 서버이기 때문에 Microsoft CLR은 win32에도 많이 의존합니다.

+0

좋아요! 고맙습니다! – abatishchev

2

Mono는 .NET 런타임의 구현이며, 그것은 확실히 나는 귀하의 질문에 .NET 런타임의 Microsoft에서 구현을 언급 한 것 같아요

(적어도 리눅스에)는 Win32 함수 호출에 매핑되지 않습니다.

관련 문제