トピックス
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 によりオーバーヘッドの削減とガベージコレクションの軽減、ConcurrentDictionary
の GetOrUpdate
メソッドのコンテキスト利用などでのアロケーションオーバーヘッドの軽減といった効果により、.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
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.Guid
が readonly 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.
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 と同様の機能を提供するアダプターライブラリー。
サイト、ドキュメントなど
ツイート
Yesterday we finished the .NET 5 -> .NET 6 upgrade! Stack Overflow is now running on .NET 6 across all servers 🥳
— Roberta Arcoverde (@rla4) May 12, 2022
Worth mentioning that it was a much smoother move than upgrading from .NET 3.1 -> .NET 5
Stack Overflow が .NET 5 から .NET 6 に移行した(.NET Core 3.1 から .NET 5 よりもスムーズだった)という話。
"👀👀 Alright Jeremy, where are you going with this?"
— Jeremy Sinclair (@sinclairinat0r) May 16, 2022
Yo fam...
What if I told you that I could do something like run Fiddler and have it load using the Arm64 .NET Framework Clr?!
Before After pic.twitter.com/L1rLVPMdi8
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。