Microsoft .NET 5의 새로운 기능

Microsoft의 두 번째 .NET 5 릴리스 후보는 10 월 13 일에 도착하여 .NET Framework와 .NET Core의 합병이 한 단계 더 가까워졌습니다. 새로운 통합 .NET 플랫폼은 2020 년 11 월 10 일에 일반 공급 될 예정입니다. 

Microsoft는 Release Candidate 2를 거의 최종 릴리스와 두 RC 중 마지막 릴리스로 설명합니다. 초기 RC는 9 월 13 일에 게시되었습니다. .NET 5.0 릴리스 후보는 dotnet.microsoft.com에서 다운로드 할 수 있습니다.

.NET 5의 높은 수준의 목표는 모든 .NET 5 응용 프로그램에서 단일 BCL (기본 클래스 라이브러리)을 사용하고 여러 운영 체제에서 네이티브 및 웹 응용 프로그램을 모두 지원하는 통합 .NET SDK 환경을 제공하는 것입니다. 단일 .NET 5 기본 애플리케이션 프로젝트는 이러한 플랫폼에서 기본 컨트롤을 사용하여 Windows, Microsoft Duo (Android) 및 Apple iOS와 같은 대상을 지원합니다.

.NET 5의 추가 목표에는 고성능 클라우드 애플리케이션 빌드 지원, BCL의 더 빠른 알고리즘, 런타임의 컨테이너 지원 향상, HTTP3 지원이 포함됩니다. .NET 5.0에는 Mono 런타임 및 .NET 라이브러리를 통해 WebAssembly 바이너리 형식에 대한 지원이 포함되어 있습니다. nullable 참조 유형 주석 집합도 제공됩니다.

.NET 5는 또한 개발자가 코드에서 잠재적 인 버그를 자동으로 찾을 수 있도록합니다. 다른 새로운 기능으로는 Half유형, 16 비트를 차지하는 이진 부동 소수점, 사용하지 않는 어셈블리를 트리밍하여 애플리케이션 크기를 줄이는 어셈블리 트리밍이 있습니다. 사용자 지정 트리밍도 강조 표시됩니다. C # 9의 새로운 패턴 일치는 관계형, 논리적 및 단순 유형 패턴을 다룹니다. 이제 ClickOnce 배포 옵션이 .NET 5.0 Windows 앱 및 .NET Core 3.1 앱에 대해 지원됩니다.

새로운 .NET 플랫폼은 또한 성능 향상을 약속합니다. 7 월 21 일에 도착한 Preview 7과 관련된 게시판은 .NET 5의 약 250 개의 성능 지향 풀 요청을 확인하고 .NET Core 성능을 따르는 사람들에게 즐거운 놀라움을 선사합니다. 

.NET 5 Preview 7 게시판에 언급 된 기타 추가 및 개선 사항 :

  • 새로운 System.text.json JSON API는 직렬화시 값 유형 속성의 기본값을 무시하는 기능을 제공하여 직렬화 및 연결 비용을 줄이는 데 유용합니다. 이것은 브레이킹 체인지입니다. 또한 System.text.json에 추가 된 것은 직렬화 할 때 순환 참조를 처리 할 수있는 기능입니다. 이제 API 모양이 최종 버전이 될 것으로 예상됩니다.
  • 가비지 컬렉션은 이제 구조체 GetGCMemoryInfo를 반환하는 메서드를 사용하여 가장 최근 컬렉션에 대한 자세한 데이터를 노출합니다 GCMemoryInfo. GCMemoryInfo시스템 및 힙 메모리와 가장 최근 컬렉션 또는 지정된 GC 종류의 가장 최근 컬렉션 (임시, 전체 차단 또는 백그라운드)에 대한 정보를 제공합니다. 이 API의 가장 유력한 사용 사례는 로깅 / 모니터링 또는 전체 GC를 요청하기 위해 머신이 순환을 중단해야 함을로드 밸런서에 표시하는 것입니다. 한편, 값 비싼 리셋 메모리 작업을 메모리 부족 상황으로 연기하기 위해 또 다른 GC 변경이 이루어졌습니다.
  • .NET 용 어셈블리 코드 생성기 인 Ryujit는 일부 경계 검사 제거에서 꼬리 중복 개선 및 중복 제로 초기화 제거 개선에 이르기까지 다양한 기능이 향상되었습니다. 또한 Ryujit에는 ARM64 하드웨어 내장 및 API 최적화가 포함되어 있습니다.

6 월 25 일에 출시 된 .NET 5 Preview 6은 유니버설 Windows 플랫폼 응용 프로그램을 빌드하기위한 API 모음 인 WinRT (Windows 런타임)에 대한 기본 제공 지원을 제거했습니다. 이것은 주요 변경 사항입니다. WinRT를 사용하는 .NET Core 3.x 앱은 다시 컴파일해야합니다. .NET 및 Windows 팀은 WinRT가 Windows에서 작동하는 방식을 변경하여 WinRT 지원을 .NET 5의 C # / WinRT 도구 체인으로 대체하기 위해 노력해 왔습니다. C # / WinRT는 C #에 대한 WinRT 프로젝션 지원을 제공하는 NuGet 패키지 도구 키트입니다.

.NET 5 Preview 6의 기타 변경 사항 : 

  • .NET 5 Preview 6 SDK에는 Windows ARM64 장치에서 Windows Forms에 대한 지원이 포함되어 있습니다. Windows ARM64에서 Windows Presentation Foundation에 대한 지원을 추가하는 작업은 계속됩니다.
  • RyuJIT 코드 품질 향상은 중복 0 초기화를 제거하기위한 구조체 처리 및 최적화를 포함합니다. 또한 ARM64 하드웨어 내장 최적화뿐만 아니라 코드 크기를 줄인 ARM64 용으로 생성 된 코드를 개선하는 작업도 진행되었습니다.
  • 플랫폼 지원 계획이 업데이트되었습니다.

6 월 10 일에 출시 된 .NET 5 Preview 5에는 다음과 같은 새로운 기능이 포함되어 있습니다.

  • RyuJIT JIT 컴파일러는 tailcall 도우미의 더 빠르고 이식 가능한 구현을 제공합니다. JIT는 테일 콜을 수행하기 위해 헬퍼가 필요하다는 것을 깨달을 때마다 런타임에 도움을 요청합니다. 또한 RyuJIT의 경우 ARM64 하드웨어 내장 기능 구현에서 지속적인 진전이있었습니다. RyuJIT의 다른 개선 사항으로는 정규 표현식 컴파일에 영향을 미치는 경우 속도가 향상되고 Intel 아키텍처 성능이 향상되었습니다.
  • .NET 코드로의 호출이 포함 된 네이티브 바이너리 내보내기가 활성화되었습니다. 이 기능의 빌딩 블록은 UnManagedCallersOnlyAttribute. 기본 내보내기 프로젝트를 사용하면 사용자 지정 기본 내보내기를 노출 할 수 있습니다. COM과 같은 더 높은 수준의 interop 기술이 필요하지 않으며 교차 플랫폼입니다.
  • DirectoryServices.Protocols 지원은 Linux 및 MacOS로 확장되고 있습니다.
  • 이제 Alpine 3.12 Linux 배포가 지원됩니다.

.NET 5.0 릴리스 후보는 dot.net.microsoft.com에서 다운로드 할 수 있습니다.

5 월 19 일에 출시 된 .NET 5 Preview 4에는 다음과 같은 새로운 기능이 도입되었습니다.

  • C # 9 및 F # 5 언어 지원.
  • F #에서 사용하는 마무리 호출의 성능이 향상되었습니다.
  • 의 성능 향상 ToUpperInvariant, string.ToLowerInvariant및 관련 패턴.
  • HTTP 1.1 및 HTTP 2 성능이 향상되었습니다.
  • 개선 된 통화 계산 메커니즘.
  • 내부 일반 사전을 동적으로 확장하여 일반 코드로 인한 성능 저하를 제거합니다.
  • 힙 조각화를 줄이기 위해 고정 된 개체 힙입니다.
  • 단일 바이너리에서 애플리케이션을 실행하는 새로운 단일 파일 게시 유형을 기반으로하는 단일 파일 애플리케이션입니다.

4 월 23 일에 공개 된 .NET 5 미리보기 3의 향상된 기능은 다음과 같습니다. 

  • ARM64 내장 함수를 사용하는 ARM64 용 하드웨어 가속 구현을 포함하도록 비트 값 배열을 관리하기위한 BitArray 클래스가 업데이트되었습니다. Microsoft는 BitArray 성능이 크게 향상되었다고 말했습니다. 또한 CLR의 OSR (On Stack replacement)은 현재 실행중인 메서드에서 실행되는 코드를 메서드 실행 중에 변경할 수 있도록 구현 한 반면 이러한 메서드는 "온 스택"으로 활성화됩니다. 계층 형 컴파일의 성능 특성을 개선하기위한이 기능은 이제 x64에서 실험적인 옵트 인 기능입니다. RyuJIT의 또 다른 개선 사항은 "꼬리 호출"위치 호출의 인수로서 구조체의 코드 품질을 향상시킵니다. RyuJIT는 또한 제네릭의 더 나은 성능을 제공 할 것으로 예상됩니다. 
  • 참조 보존에 대한 지원이 System.Txt.Json에 추가되어 JSON 직렬화에 대한 참조 루프 처리가 가능합니다. 또한 이제 JsonSerializer에 대해 변경 불가능한 클래스 및 구조체가 지원됩니다. 현재 지원되는 것은 null 값 처리입니다.
  • 이제 .NET SDK는 프로젝트 파일에서 .NET Framework 대상 프레임 워크가 지정된 NETFramework.ReferenceAssemblies NuGet 패키지를 자동 참조합니다. 이 변경으로 .NET Framework 대상 팩이 설치되지 않은 컴퓨터에서 .NET Framework 프로젝트를 빌드 할 수 있습니다. 이 개선 사항은 대상 팩에만 해당되며 다른 가능한 프로젝트 종속성을 고려하지 않습니다.

4 월 2 일에 출시 된 .NET 5 미리보기 2의 특정 개선 사항은 다음과 같습니다. 

  • RyuJIT는 생성 된 기계 코드의 품질을 개선하기 위해 여러 가지 변경 사항이 적용되었습니다. 여기에는 중복 제로 초기화가 더 적극적으로 제거되고 이전에 호출 된 nullable 상자 최적화가 포함됩니다.
  • 이제 서로 다른 스레드의 서버 가비지 수집이 이전 세대 개체에 의해 활성화 된 gen0 / 1 개체를 표시하는 동안 작업 도용이 가능합니다. 스레드를 가로 질러 작업을 훔치는 것은 일부 GC 스레드가 다른 스레드보다 표시하는 데 훨씬 더 오래 걸리는 시나리오에서 임시 GC 일시 중지를 단축합니다. 또한 수집기가 고정 된 개체를 개별적으로 관리 할 수 ​​있도록 가비지 수집 내부 부분 인 고정 된 개체 힙 (POH) 기능의 일부가 구현되었습니다. 이렇게하면 고정 된 개체가 세대 별 힙에 미치는 부정적인 영향을 방지 할 수 있습니다.

3 월 16 일에 출시 된 Preview 1에는 RyuJIT의 코드 품질 향상과 정규식 성능 향상이 포함되었습니다.

2020 년 11 월에 출시 될 예정인 .NET 5는 다음을 포함하도록 설정됩니다.

  • 웹 애플리케이션을위한 오픈 소스 프레임 워크 인 ASP.NET Core.
  • Entity Framework 핵심 데이터 액세스 기술.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Xamarin 모바일 앱 장치 모델.
  • ML.NET.

마이크로 소프트는 .NET 5가 모든 유형의 애플리케이션을 구축 할 수있는 단일 통합 플랫폼을 제공 할 것이라고 밝혔다. 이 회사는 Azure 부하 분산을 사용하여 트래픽의 절반을 테스트 사례로 .NET 웹 사이트 트래픽으로 .NET 5 버전으로 보냅니다. 

Microsoft는 개발자가 .NET Core 3.1을 사용하여 새 응용 프로그램을 빌드 한 다음 .NET 5로 마이그레이션 할 것을 권장합니다.이 회사는 .NET Framework 응용 프로그램을 .NET Framework에 남겨 둘 수 있으며 Windows 자체가 지원되는 한 계속 지원됩니다.