トピックス
Uno Platform 4.4 – Wasm Threading+Exception Handling, Rich Animations, GamePad APIs and more
Uno Platform 4.4 がリリースされた。
このバージョンでは Skottie 統合による Lottie アニメーションの再生、TextBlock の SkiaSharp での書き換え、テンプレートの更新、ゲームパッド API、パフォーマンス改善などが含まれている。
また WebAssembly に関する強化も .NET 7 に先駆けて幾つか導入され WebAssembly 例外や WebAssembly スレッドのサポートが追加となった。
Leveraging trimming to make the Microsoft Store faster and reduce its binary size - #ifdef Windows
Microsoft Store アプリケーションをトリミングすることでパフォーマンス改善とバイナリサイズの削減を行ったことについての記事。
最近更新された Microsoft Store アプリケーションは C# で書かれた UWP アプリケーションであり、.NET Native (Native AOT の前身的なもの) で AOT コンパイルされている。.NET Native は .NET SDK 同様 IL トリミングの機能があり、記事では IL トリミングをどのようにして有効にするか、有効にした場合にどのような落とし穴や壊れやすい部分があるのかといったことに触れている。
ケーススタディーとして動的なプロパティーの取得や XAML のページレイアウトセレクターの型名の取得などといったコードでリフレクションをいかにして減らしたかを説明している。また、オープンソースの Windows Community Toolkit でのトリミングの問題解消に貢献したとのこと。
トリミングによって Microsoft Store のアプリケーションバイナリサイズが 25% 程度削減できたとしている。
まとめとしてトリミングの有効化は落とし穴や必要な作業も増えてしまうがとても価値があり、新しいコードを書くときは常にパフォーマンスとトリミングを念頭に置くことが重要であるとしている。これは後からトリミングを有効にした際のエラーを減らして時間を節約できることに繋がる他、(リフレクションなどによる)エラーの発生しにくいコードを書くことを強制されるためとしている。
StackExchange.Redis 2.6.48 is now deployed
https://twitter.com/marcgravell/status/1541782061278789632
StackExchange.Redis 2.6.48 がリリースされた。
直前にリリースされたバージョン 2.6.45 でのバッチ/トランザクションハンドリングに問題があり、正しくトランザクションに入らない可能性があるため、2.6.45 を使用している場合には更新の必要がある。(2.6.45 は NuGet から取り下げ済)
StackExchange.Redis 2.6.48 is now deployed; this is considered a critical update if you're using the recent 2.6.45 (if you're not using that: no urgency) https://t.co/ri2dIYXMdF
— Marc Gravell (@marcgravell) June 28, 2022
アーティクル、スライドなど
Cosmos DBに対する .NET での再試行ロジック - Qiita
https://qiita.com/hamu502/items/2cc26723c010fa7e6ca4
Cosmos DB の .NET クライアントでの再試行ロジックについて解説している記事。
High performance .NET: Building a Redis Clone – skipping strings
Redis クローンを作るシリーズの記事。
文字列をスキップしてバイト配列を保持するのに再利用可能なバッファーを作ることで文字列の確保を回避することについて。
Native AOT and Ahead-of-Time Compilation in .NET
https://flerka.github.io/personal-blog/2022-06-21-ahead-of-time-compilation/
.NET 7 の Native AOT (事前コンパイル) についての記事。
記事では仕組みや AOT でのメリットとデメリット、.NET 7 での Native AOT を利用してコンソールアプリケーションや AWS Lambda での実行とその効果といったものを紹介している。
Sneak Peek and Edit Your Code While You Search - Visual Studio Blog
https://devblogs.microsoft.com/visualstudio/sneak-peek-and-edit-your-code-while-you-search/
Visual Studio 2022 のプレビューで実装されている All-In-One 検索の 17.3 Preview 2 の新機能の紹介記事。
17.3 Preview 2 では検索結果の一覧にコードプレビューから編集が可能となり、検索 UI から離れることなく完全なコード編集体験が提供される。
Creating a Certificate Checker With .Net
https://betterprogramming.pub/creating-a-certificate-checker-with-net-3317b53f91da
ASP.NET Core と HttpClient を使って証明書のチェックツールを作るという記事。
記事では URL を POST すると、有効期限などを返却するような API を実装している。
【抄訳】.NET MAUI の使用を開始するための新しいリソース - Qiita
https://qiita.com/Azure_App_Innovation_team/items/2133fea31b7da7a56e32
New Resources to Get Started with .NET MAUI の翻訳記事。
The difference between null check with ‘is’ instead of ‘==’ in C#
null
チェックにおいて is
を使用した場合と ==
を使用した場合での違いについて解説している記事。
is
では ==
オペレーターオーバーロードを考慮しない比較であることなど。
Using Refit to Consume APIs in C# - Code Maze
https://code-maze.com/using-refit-to-consume-apis-in-csharp/
Refit を使用して REST クライアントを実装する方法についての記事。
Running a .NET MAUI Windows App as Administrator (Elevated)
https://blog.verslu.is/maui/net-maui-windows-app-as-administrator-elevated/
.NET MAUI のアプリケーションを管理者権限で起動する方法についての記事。
package.appxmanifest と app.manifest で設定を指定することで可能となる。
Observing all http requests in a .NET application - Gérald Barré
https://www.meziantou.net/observing-all-http-requests-in-a-dotnet-application.htm
HttpClient を使用したリクエストを DiagnosticSource と EventSource で監視する方法についての記事。
Multi-Image Docker Images: Using COPY with Images directly from registries
Docker イメージをビルド時に、複数の Docker イメージから COPY でファイルをコピーする方法についての記事。
.NET のイメージには特定のバージョンのランタイムのみが含まれるため、以前のバージョンを必要とする場合に複合的なイメージを自分で用意する必要がある。
CppSharp で Native Binding を楽に行う
https://zenn.dev/tan_y/articles/70d9dc73f8e663
CppSharp を使用してネイティブライブラリーのヘッダーファイルからバインディングを生成し、C# から呼び出すことを解説する記事。
記事では CppSharp の使用方法や C++ との連携、その他注意すべき点にも触れている。
IDbContextFactory を使って並列でクエリを実行する - Qiita
https://qiita.com/karuakun/items/bc7407462f399da001ec
Entity Framework Core で並列にクエリーを実行する方法についての記事。
DbContext は並列に操作を行うことができないため、 IDbContextFactory を使用して複数の DbContext を作ることで呼び出せるようにする。
Getting Started with DevOps and .NET MAUI
https://devblogs.microsoft.com/dotnet/devops-for-dotnet-maui/
.NET MAUI の DevOps パイプラインを GitHub Actions と Azure DevOps を使用して構築することを説明している記事。
macOS でのビルドと Windows でのビルドについてそれぞれ触れている。
Understanding your middleware pipeline in .NET 6 with the Middleware Analysis package
ミドルウェアの診断パッケージを使用してミドルウェアのパイプラインを理解することを説明している記事。
Microsoft.AspNetCore.MiddlewareAnalysis と DiagnosticsAdapter を使用することでミドルウェアの呼び出しイベントを購読でき、記事ではそれらを使って呼び出しをログに出力するといったことを行っている。
サイト、ドキュメントなど
ツイート
We merged a preview C# 11 feature into VS 17.3: `ref` fields.
— Julien Couvreur (@jcouv) June 28, 2022
This allows adding `ref` fields inside `ref struct` types (to safely simplify some perf scenarios) and overriding lifetime defaults with the `scoped` modifier for variables.
Spec: https://t.co/RKtYbm8e3G
C# 11 のプレビュー機能である ref
fields が Visual Studio 2022 17.3 (プレビュー) にマージされたという話。
After 22+ awesome years at Microsoft (18+ of which were awesome in a good way 😂 ), it is time for me to try something new.
— Jeffrey Snover (@jsnover) June 27, 2022
I feel blessed to have had the opportunity to work with such incredible people and to work on things that matter.
My last day will be Friday, July 1st. pic.twitter.com/l2inatE2BM
PowerShell の生みの親であるところの Jeffrey Snover 氏が Microsoft を去るという話。