2022-05-19: Unity and .NET, Azure Cosmos DB Journey to .NET 6, Regular Expression Improvements in .NET 7

Published on Thursday, 19 May 2022

トピックス

Unity and .NET, what’s next? | Unity Blog

https://blog.unity.com/technology/unity-and-net-whats-next

Unity の .NET に関する今後の方針についての解説記事。

Unity は現在までに Mono のアップデートなどを経て C# の言語サポートの向上などを行ってきたが、一方で .NET エコシステム自体も進化し NuGet や最新のランタイムやツールといったものを Unity と共に利用したいというニーズが高まっていること。今後 Unity は .NET SDK やランタイム、MSBuild といったものを活用できるよう Mono から CoreCLR へと移行していく。

ランタイムの移行についてはまずデスクトップのスタンドアローンプレイヤーで CoreCLR サポートを行う (2023年中)、その後 2024年に Unity Editor を CoreCLR へと移植し .NET 7/8 の API アクセスが可能となるようにする。

その他、現在進行中のモダナイズとして async/await のサポートの改善や Span<T> によるメモリーの割り当てとコピーの改善といったことを進めているとのこと。

The Azure Cosmos DB Journey to .NET 6 - .NET Blog

https://devblogs.microsoft.com/dotnet/the-azure-cosmos-db-journey-to-net-6/

Azure Cosmos DB を .NET 6 へ移行したという事例紹介記事。

API ゲートウェイでは .NET のアップグレードを経て、継続的にパフォーマンス改善の恩恵を受けていたこと、ゲートウェイを HttpListener (HTTP.sys) から Kestrel へ移行することでスループットを大幅に改善したことなど。

Span をはじめとした新しい API によりオーバーヘッドの削減とガベージコレクションの軽減、ConcurrentDictionaryGetOrUpdate メソッドのコンテキスト利用などでのアロケーションオーバーヘッドの軽減といった効果により、.NET Framework から .NET Core へ移行した結果、待機時間が5倍改善された顧客もいた。

複数の NUMA ノードを持つ強力な VM で稼働するプロセスの動作を最適化するため、プロセスを特定の NUMA ノードに関連付けるプロセッサーアフィニティーを設定したこと、非同期コードの処理が改善されたことで .NET のアップグレードで性能が向上したことなども触れている。

Regular Expression Improvements in .NET 7 - .NET Blog

https://devblogs.microsoft.com/dotnet/regular-expression-improvements-in-dotnet-7/

.NET 7 での正規表現の改善についての記事。

記事では .NET 7 で強化される様々な機能について紹介している。

  • バックトラッキング (RegexOptions.NonBacktracking)
    • DFA エンジン
  • StringSyntaxAttribute.Regex
    • Visual Studio 上での文字列内での IntelliSense やシンタックスハイライト
  • 大文字小文字を区別しないマッチング (RegexOptions.IgnoreCase)
  • ソースジェネレーション
    • Source Generator によるマッチングの生成
  • Span
    • Span を受け入れる API とそれを利用したマッチの列挙など
  • ベクトル化
    • Boyer-Moore アルゴリズムからの変更など
  • 自動アトミック化とバックトラッキング
  • 文字クラス(セット)最適化

Announcing gRPC JSON transcoding for .NET - .NET Blog

https://devblogs.microsoft.com/dotnet/announcing-grpc-json-transcoding-for-dotnet/

gRPC JSON トランスコーディングについてのアナウンス。

.NET 7 で gRPC サービスを JSON の RESTful API として表現するトランスコーディングの仕組みが提供される。

JSON トランスコーディングは grpc-web と異なり、ASP.NET Core の内部で Protobuf と JSON を相互変換し gRPC サービスの呼び出しに変換するため、ブラウザー側に特別なクライアントが不要となり一般的な JSON を受け付ける RESTful API のように使用できる。

Rider 2022.2 Roadmap | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/05/18/rider-2022-2-roadmap/

Rider 2022.2 での開発ロードマップについての記事。

記事では予定している開発機能として次のものを紹介している。

  • プロジェクトごとの設定の新しい既定値
  • メインツールバーの変更
  • MAUI 実行構成のサポートの追加
  • Xamarin と Unity の新しいツールバー
  • Razor ビューでの JavaScript 再フォーマット
  • Windows での .NET Core への移行
  • リモート開発
  • Windows Subsystem for Linux

EAP は現在提供されていないが間もなく提供が始まるとのこと。

ReSharper 2022.2 Roadmap | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/05/18/resharper-2022-2-roadmap/

ReSharper 2022.2 での開発ロードマップについての記事。

記事では予定している開発機能として次のものを紹介している。

  • 言語サポートと改善
  • 仮想コードスタイルとその他のコードフォーマッターの更新
  • プロファイラの更新

Rider 同様 EAP は現在提供されていないが間もなく提供が始まるとのこと。

What's new with ML.NET Automated ML (AutoML) and tooling

https://devblogs.microsoft.com/dotnet/whats-new-with-mldotnet-automl/

ML.NET AutoML の更新についての記事。

  • AutoML の更新
    • Experimental API
    • 検索スペースとスイープ可能な推定器
  • モデルビルダーと ML.NET CLI の更新
    • 時系列予測シナリオ (プレビュー)
    • 新しいバージョンの ML.NET CLI
  • ノートブックのショートカット

その他、今後の予定としてディープラーニング、.NET DataFrame、MLOps といったものについても触れている。

Release Release v2.46.0 · grpc/grpc-dotnet

https://github.com/grpc/grpc-dotnet/releases/tag/v2.46.0

gRPC (grpd-dotnet) の 2.46.0 がリリースされた。

このリリースでは不具合の修正のほか、リゾルバーのリトライや呼び出し資格情報をクライアントファクトリーで追加するといった機能の追加が行われている。

アーティクル、スライドなど

Blazor アプリケーションを "http://example.​com/foo/bar/" のような Sub Path に配置するために必要な実装 - Qiita

https://qiita.com/jsakamoto/items/7f1bdf4ce3d9c757ed94

Blazor WebAssembly アプリケーションを特定のパス以下に配置する方法についての記事。

New Features in C# 10/11 - Speaker Deck

https://speakerdeck.com/chack411/11

C# 10/11 での新機能についてのまとめスライド。

Docker multi-architecture, .NET 6.0 and OpenCVSharp

https://dev.to/syamaner/docker-multi-architecture-net-60-and-opencvsharp-1okd

.NET 6 で OpenCVSharp を利用するアプリケーションをマルチアーキテクチャー (x64, arm32, aarch64) Docker コンテナーイメージにする方法についての記事。

Migrating MR.Gestures from Xamarin.Forms to .NET MAUI - Xamarin Blog

https://devblogs.microsoft.com/xamarin/migrating-mrgestures-to-dotnet-maui/

MR.Gestures (商用ジェスチャーライブラリー) を Xamarin.Forms から .NET MAUI に移行したことについての記事。

All-In-One Search Is Getting Slicker - Visual Studio Blog

https://devblogs.microsoft.com/visualstudio/all-in-one-search-is-getting-slicker/

Visual Studio 2022 version 17.2 でプレビューとして導入された All-In-One 検索の改善についての記事。

【C#】非同期HTTPSサーバー通信アプリを作ってみた - Qiita

https://qiita.com/piro_rin_piro/items/ed404d205cb90eb9e79a

組み込み機器などのテストのために HTTPS サーバーを自作するという記事。

IEnumerable Visualizer In Visual Studio 2022 - .NET Core Tutorials

https://dotnetcoretutorials.com/2022/05/17/ienumerable-visualizer-in-visual-studio-2022/

.NET Framework でもタダでカバレッジをとりたい! - Qiita

https://qiita.com/uttne/items/ad5bd3b2a1e41e1c2b52

Case Study – How the Profilers Uncover Critical Issues That Mimic Apps’ Normal Behavior | The .NET Tools Blog

https://blog.jetbrains.com/dotnet/2022/05/16/case-study-how-the-profiler-uncovers-critical-issues-that-mimic-apps-normal-behavior/

How to use biometric authentication in .NET MAUI - Andreas Nesheim

https://www.andreasnesheim.no/how-to-use-biometric-authentication-in-net-maui/

ASP.NET Core Http Security Header

https://muratsuzen.medium.com/asp-net-core-http-security-header-cf4d0fb61df8

MVVM Toolkit の Messenger を使うときに購読解除を共通化する - Qiita

https://qiita.com/nikothewolfox/items/974761367d0d32f4f1e3

Blazor で HTML と CSS で画面作りたくないよぉ…

Blazor で利用できる UI ツールキットの紹介記事。

.NET6でいつの間にかGuidがreadonly structになっていた

https://zenn.dev/nin_neko/articles/c5881dccd6ae25

.NET 6 で System.Guidreadonly struct へと変更されていたことについての記事。

OpenTelemetry in Action: Optimizing Database Operations

https://rahul-rai.medium.com/opentelemetry-in-action-optimizing-database-operations-a8865a396377

API の呼び出し中のデータベースアクセスに関する情報を OpenTelemetry で追いかけて改善する方法についての記事。

Automated accessibility testing in Playwright .NET with Axe.

https://medium.com/@isaacwalker1377/automated-accessibility-testing-in-playwright-net-with-axe-40221dc23f08

Playwright と Axe で .NET からアクセシビリティテストを行う方法についての記事。

Telegram Botを使う - Qiita

https://qiita.com/iota_11/items/b681f21d9bb6ec24f14d

Telegram.Bot を使用した Telegram のボットの作成についての記事。

ライブラリ、リポジトリ、ツールなど

dotnet/systemweb-adapters

https://github.com/dotnet/systemweb-adapters

ASP.NET Core 上で .NET Framework の ASP.NET の System.Web と同様の機能を提供するアダプターライブラリー。

サイト、ドキュメントなど

ツイート

Stack Overflow が .NET 5 から .NET 6 に移行した(.NET Core 3.1 から .NET 5 よりもスムーズだった)という話。

start コマンドには起動したいアーキテクチャーを指定できる /machine オプションがあるので、ARM64 マシン上で AnyCPU でビルドされたアプリケーションを /machine arm64 で実行することで ARM64 版 .NET Framework でアプリケーションを起動できることがあるというテクニック。

Deep Dive

✨ Implement SegmentedHashSet<T> by sharwell · Pull Request #54574 · dotnet/roslyn

https://github.com/dotnet/roslyn/pull/54574

Roslyn の内部コレクションの話。HashSet の持つバケットを SegmentedArray (これは断片化された Array で Sequence のようなもの)にすることで Large Object Heap を使わないようにするという PR。