.NET 언어에서 Native 코드를 직접 만드는 것.

.NET 언어를 컴파일 할 때 C++ 컴파일러가 관여.

클라이언트의 디바이스에 완전하게 네이티브화 한 상태에서 배포.

클라이언트에서 쓸데 없는 전력 소모를 안하고 첫 실행도 빠르다.

현재는 Windows Store App만 지원. 장래에 데스크탑 App도 지원할 예정임.

 

클라이언트 디바이스에 닷넷 프레임워크 설치?

필요없음. 실행에 필요한 것은 전부 네이티브 화, 정적 링크

 

C# 네이티브 컴파일러가 동작하는가?

아니다. MSIL의 사전 컴파일. C#의 경우 C# -> MSIL ->MDIL -> 네이티브화 순서로.

사양 상 .NET 언어라면 무엇이든지 네이티브화 가능하나 현재는 C#만 지원.

 

GC?

여전히 사용. 메모리는 관리된다. Native이지만 unmanaged는 아니다.

.NET Native로 빌드하면 실행 파일에 MRT.dll이라는 DLL이 배포되어 그 안에 GC 코드가 들어가 있다.

 

바이너리 사이즈는 커지지 않나?

사용하지 않는 부분은 빠지고 네이티브화 하여 정적 링크 되므로 괜찮다.

 

라이브러리가 갱신 될 때는?

이것이 현재 Store App만 적용된 이유가 생각. Store 서버 상에서 클라우드 컴파일 하므로 의존하고 있는 라이브러리가 변경 된다면 자동으로 바이너리가 갱신된다.

 

리플렉션은?

가장 제약이 많은 곳이다. 사용하지 않는 코드는 제거되므로 사전에 '리플렉션을 사용하고 있다'라고 컴파일러에 알려줘야 한다.

XAML 데이터 바인딩으로 사용한 타입이나 DataContractSerializer 생상자에 typeof(T)로 넘긴 타입은 자동으로 리플렉션 처리된다.

참조 정의 파일을 만들면 리플렉션 사용에 문제 없고 dynamic도 사용할 수 있다.

 

제너릭은?

타입형 제너릭이 일부 실행할 수 없는 문제가 발생할 수 있다.

 

사용할 수 있는 .NET 표준 라이브러리는?

현재 베이스는 .NET 코어 기준. 여기에 몇 개의 클래스/메소드를 사용할 수 없다.

예를 들면 아래의 것은 사용 불가

DataAnnotations

Microsoft.VisualBasic

WCF

DelegateBeginInvoke/EndInvoke

COM Interop로 VARIANT

DateTime.Parse로 파스 할 수 있는 문자욜에 제약이 있다.

 

그 외 제약은?

구조체 최대 사이즈는 1M Byte

3차원 이상의 다상 배열은 사용할 수 없다.

포인터 타입 배열 사용 불가

 

코드 최적화는?

JIT와 달리 컴파일에 시간이 걸리므로 이런저런 최적화를 해준다. 컴파일러는 C++과 같은 것을 공유하고 있다. 그래서 auto-vectorization도 해 준다.

 

 

 

관련 세션 자료 http://channel9.msdn.com/Events/Build/2014/3-589

공식 사이트 http://msdn.microsoft.com/en-us/vstudio/dotnetnative

MSDN  http://msdn.microsoft.com/en-us/library/dn584397.aspx

FAQ   http://msdn.microsoft.com/en-US/vstudio/dn642499.aspx

 

 

 

출처: http://ufcpp.wordpress.com/2014/04/03/net-native/

 

 

 

 

저작자 표시
신고
by 흥배 2014.04.10 08:00
| 1 |