Successfully reported this slideshow.
Your SlideShare is downloading. ×

20201127 .NET 5

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 27 Ad
Advertisement

More Related Content

Slideshows for you (20)

Similar to 20201127 .NET 5 (20)

Advertisement

More from Takayoshi Tanaka (20)

Recently uploaded (20)

Advertisement

20201127 .NET 5

  1. 1. C# Tokyo イベント
  2. 2. 自己紹介: @tanaka_733 ◦ 「Observability(可観測性)プラットフォーム」がお仕事 ◦ Go, Java, JavaScript, Ruby, PHP, Rustに加えてC#やってます ◦ クラウドもオンプレもWindowsもLinuxもコンテナもサーバーレスもやってます Microsoft MVP for Azure & Development Technologies ◦ Q#もやっています
  3. 3. 今日のセッションについて .NET 5関連の新機能を30分でざっくりと知ったつもりになる 細かいところは立ち入らない (C# 9の新機能とか) ASP.NET Core, EF Coreも立ち入らない
  4. 4. .NET 5 ダウンロード ◦ インストーラー(OSごとのインストーラーおよびインストールスクリ プト) ◦ https://dotnet.microsoft.com/download/dotnet/5.0 ◦ コンテナイメージ ◦ https://hub.docker.com/_/microsoft-dotnet ◦ リリースノート ◦ https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0.0/5.0.0.md ◦ 既知の問題 ◦ https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0-known-issues.md
  5. 5. https://github.com/dotnet/designs/blob/main/accepted/2020/net5/pic01.png
  6. 6. なにがアップデートされた? .NET 5 ASP.NET Core 5 Entity Framework Core 5 C# 9, F# 5 Visual Studio, Visual Studio for Mac, VS Codeなどのツール
  7. 7. .NET 5 新機能一覧 (1) ◦ C# 9とF# 5へアップデート ◦ コンパイル時にコード生成を可能にするC# Source Generatorの導入 ◦ IEEE 754のbinary16 に対応する数値型としてHalf 構造体の導入 ◦ null許容参照型のアノテーション導入の完了 ◦ Target Framework (TFM)が大きく2つに ◦ 特定のOS(主にWindows)のみで動作するAPIの使用を検出し修正可能に ◦ WebAssembly環境を考慮 ◦ さまざまなパフォーマンス改善 ◦ 文字列処理・正規表現やネットワーク関連などの改善 GitHubのissue ◦ 95%パーセンタイル以上(P95+)でも予測可能で一貫したパフォーマンスが得られるようにする改善 Improving P95+ latency · Issue #37534 · dotnet/runtime · GitHub ◦ GC、JITなどの改善 ◦ ARM64対応
  8. 8. .NET 5 新機能一覧 (2) ◦ 配布オプションの追加 ◦ ClickOnceでのクライアントアプリの展開 ◦ 単一の実行ファイルへの対応 ◦ コンテナイメージサイズの縮小とcgroup v2への対応 ◦ Server Coreイメージの追加 ◦ 自己完結型アプリケーションの配布サイズを小さくする機能 ◦ JsonSerializer の改善 ◦ WindowsでもICUを利用へ ◦ .NET5の一部としてWinRT APIをサポート ◦ ネイティブコード運用の改善 ◦ アプリケーションコードの潜在的なバグを見つける分析機能 ◦ オブザーバビリティ(OpenTelemetry)やマイクロサービス(Tye)対応
  9. 9. .NET のリリースとサポートモデル 2019年12月 2020年11月 2021年11月 2022年11月 2023年11月 .NET Core 3.1 LTS .NET Core 5.0 GA .NET Core 6.0 LTS .NET Core 7.0 GA .NET Core 8.0 LTS 最低3年 次のGA+3か月 次のGA+3か月 最低3年 Microsoftのサポートは最新のサービスアップデートに対して提供 コミュニティによるサポートや、3rd Partyからのサポートもあり https://devblogs.microsoft.com/dotnet/net-core-releases-and-support/
  10. 10. .NET Frameworkはサポートされます ◦ .NET Framework 4.8が最後のメジャーリリース ◦ 機能追加などは行われない ◦ バグ修正や信頼性向上、セキュリティ更新などは予定 ◦ Windowsが新しくなっても提供される
  11. 11. C# 9.0とF# 5.0 ◦ C# 9.0は.NET 5.0のみサポート ◦ .NET Core 3.1以下で動くかもしれないけどサポートはされない ◦ What’s new in C# 9.0 ◦ C# 9.0の新機能はまたC# Tokyoでやりましょう ◦ IEEEのbinary16 (float16)に対応したHalf 構造体の導入 ◦ Source Generatorでコンパイル時コード生成が可能に ◦ https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/ ◦ (厳密にはC# 9.0の一部ではない)
  12. 12. Null許容型に関するアノテーションを .NETライブラリ全体に付与完了 ◦ ドキュメントにはまだ反映しきれていない ◦ Visual StudioのF12によるメタデータ参照や source.dot.net で確認 https://devblogs.microsoft.com/dotnet/annou ncing-net-5-0/#nullability-annotation- improvements
  13. 13. Target Framework Names (TFM) はプラットフォーム共通とOS固有のものへ ◦ .NET5ではnet5.0とnet5.0-windows… ◦ net5.0-windows10 やnet5.0-windows10.0.17763.0 などOSバージョンを制限できる ◦ WPF、WinFormsはnet5.0-windowsのみで動作 ◦ .NET 6 でXamarinが入るとnet5.0-androidなども追加 ◦ Microsoft.Win32.RegistryのようなWindows固有APIを ◦ なにもせずに利用すると警告が出る ◦ 利用したいときは属性もしくは条件チェックを行う ◦ WebAssembly環境にはTFMは用意しない ◦ プロジェクトの設定でBrowserサポートを追加すると Browserで利用できないAPIを呼び出すと警告される ◦ https://devblogs.microsoft.com/dotnet/the-future-of-net-standard/
  14. 14. .NET 5 performance improvements TechEmpower benchmarks round 20 predicted perf increases for .NET 5 over .NET Core 3.1 +38%11,712,405 RPS Plaintext +42%1,243,436 RPS Json +20%417,818 RPS Fortunes Internal tests of .NET 5 performed on equivalent hardware as TechEmpower Keynote - Welcome to .NET 5より引⽤(次ページも)
  15. 15. .NET 5 performance improvements ž +30% socket performance improvement on Linux over .NET Core 3.1 ž JSON serialization performance improved +19% over .NET Core 3.11 ž Serialization of large collections & arrays improved 3x and are now zero-alloc ž gRPC server performance exceeds Go, C++ and Java2 1 All 104 JSON serialization benchmarks improved 2 https://github.com/LesnyRumcajs/grpc_bench/wiki/2020-08-11-bench-results 0 10000 20000 30000 40000 50000 60000 rust_tonic_mt dotnet_grpc go_grpc cpp_grpc_mt java_grpc gRPC Server Performance Requests/Sec (higher is better)
  16. 16. さまざまなパフォーマンス改善 ◦ GCやJIT関連 ◦ coreclrをC/C++実装からC#実装へしたことがパフォーマンス改善作業を容易に ◦ マネージドコードからネイティブコードを呼ぶオーバーヘッドが大きかった箇所もある ◦ C#がマネージドコードである利点をランタイム、GC、JITで生かし改善している ◦ 文字列処理、ネットワークなど機能面の高速化 ◦ Int.ToString、DateTime、DateTimeOfset、Encoding.UTF8など ◦ 正規表現 ◦ コレクション、LINQ ◦ ネットワーク、HTTP/2対応の改善 ◦ 暗号、リフレクションなどなど ◦ P95+にフォーカスした改善 ◦ https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/
  17. 17. P95+ 最悪値でも予測可能に とあるWebアプリの処理時間のヒストグラム 頻度 処理時間 P95 P99 P95=95%パーセンタイル値 全体で遅い処理にも着目し、改善する
  18. 18. 平均、最頻値、P95、P99 平均(緑線) P95(青線) とあるWebアプリの処理時間の時間変化 P99(黄線)
  19. 19. ARM64対応 ◦ Windows ARM64も含めてARM64対応 ◦ .NET 5としては対応しているがWPFは未対応 (来年前半予定) ◦ ARM64でのパフォーマンス改善 ◦ .NETライブラリでのARM64固有コードの改善 ◦ RyuJITによって生成されたコード品質の改善 ◦ https://devblogs.microsoft.com/dotnet/arm64-performance-in-net-5/
  20. 20. さまざまな展開方法のサポート・改善 ◦ ClickOnceに対応 ◦ .NET Core 3.1および.NET 5 以降のWinForm, WPF, ConsoleApp ◦ SmartScreenなどWindows側のセキュリティ機能にも対応 ◦ 単一ファイルサポートの拡大 ◦ トリミングによりファイルサイズの削減が可能に ◦ コンテナイメージの縮小 ◦ Windows Server Coreイメージを追加
  21. 21. .NETライブラリとしての System.Text.Jsonの高速化・機能追加 ◦ 不変型やレコード型にも対応 ◦ Newtonsoft.Jsonからの移行用のドキュメント ◦ 機能例 ◦ デフォルト値の無視など新しいグローバルオプション ◦ パブリックでないプロパティアクセサーの使用 ◦ KeyがstringでないDictionaryのサポート ◦ NullをConverterで扱うかどうかを制御可能に ◦ HttpClientの拡張メソッドとして GetFromJsonやPutAsJsonなどが利用可能に
  22. 22. WindowsでもICUを使うように ◦ ICU - International Components for Unicode ◦ カルチャや文字列の他、タイムゾーン情報を含んでいる ◦ .NET Core 3.1まではWindowsではOS固有のNLSを利用 ◦ 最近だと「令和」がいつ対応されるかで話題に ◦ .NET 5以降はWindowsでもデフォルトでICUを利用 ◦ NLS利用も可能
  23. 23. WinRT 相互運用機能 ◦ .NET Core 3.1までのものと互換性がないため、 利用していたプロジェクトを.NET 5対応するためには移行が必要 ◦ 新しい機能は .NET 5.0かつWindows10 version1809以降で利用可能 ◦ 新しい言語機能を取り入れるなど利用しやすくしている ◦ https://blogs.windows.com/windowsdeveloper/2020/11/10/announcing-c- winrt-version-1-0-with-the-net-5-ga-release/
  24. 24. 開発プラットフォーム 視点でのまとめ
  25. 25. デスクトップ開発 ◦ Windows Forms、WPFデザイナー ◦ Visual Studioツール ◦ ClickOnceインストーラー ◦ 3rd Partyのコントトール ◦ 自己完結型、単一ファイルなEXEファイル ◦ 実行マシンに.NET Frameworkのインストールが不要に ◦ パフォーマンス改善 ◦ Webview2 (Edge Chromium)など最新のコントロール è かずきさんのセッションで説明が?
  26. 26. Web開発 ◦ RazorもしくはBlazorが主要なフレームワーク ◦ 新機能は主にBlazor関連 ◦ Razorまわりは機能改善・パフォーマンス向上 ◦ もちろん、Blazorもパフォーマンス向上 ◦ .NET Frameworkから移植されない技術は 例えば次のような移行がおすすめされている ◦ WebFormはBlazorへ ◦ WCFはgRPCへ
  27. 27. マイクロサービスやオブザーバビリティへの投 資 ◦ マイクロサービスを活用するための機能・プロジェクト ◦ REST API ◦ OpenAPI ◦ API REPL ◦ Clientコード生成 ◦ Tye => 松村さんのセッションで! ◦ オブザーバビリティ(可観測性)を実現するための機能 ◦ 監視をし、サービス改善のために必要なアクションをとれるようにする ◦ dotnet-monitorによる診断機能 ◦ OpenTelemetryプロジェクトに対(主に分散トレーシングとメトリクス)

×