2022-07-01: Uno Platform 4.4, Leveraging trimming to make the Microsoft Store faster and reduce its binary size, StackExchange.Redis 2.6.48

Published on Friday, 01 July 2022

トピックス

Uno Platform 4.4 – Wasm Threading+Exception Handling, Rich Animations, GamePad APIs and more

https://platform.uno/blog/uno-platform-4-4-wasm-threadingexception-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

https://devblogs.microsoft.com/ifdef-windows/leveraging-trimming-to-make-the-microsoft-store-faster-and-reduce-its-binary-size/

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 から取り下げ済)

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

Cosmos DBに対する .NET での再試行ロジック - Qiita

https://qiita.com/hamu502/items/2cc26723c010fa7e6ca4

Cosmos DB の .NET クライアントでの再試行ロジックについて解説している記事。

High performance .NET: Building a Redis Clone – skipping strings

https://ayende.com/blog/197569-B/high-performance-net-building-a-redis-clone-skipping-strings?Key=bde50824-c368-4a40-a839-c677c368b1d3

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#

https://medium.com/@erickgallani/the-difference-between-null-check-with-is-instead-of-in-c-ed3d955a639e

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

https://dev.to/shandesai/multi-image-docker-images-using-copy-with-images-directly-from-registries-50ed

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

https://andrewlock.net/understanding-your-middleware-pipeline-in-dotnet-6-with-the-middleware-analysis-package/

ミドルウェアの診断パッケージを使用してミドルウェアのパイプラインを理解することを説明している記事。

Microsoft.AspNetCore.MiddlewareAnalysis と DiagnosticsAdapter を使用することでミドルウェアの呼び出しイベントを購読でき、記事ではそれらを使って呼び出しをログに出力するといったことを行っている。

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

ツイート

C# 11 のプレビュー機能である ref fields が Visual Studio 2022 17.3 (プレビュー) にマージされたという話。

PowerShell の生みの親であるところの Jeffrey Snover 氏が Microsoft を去るという話。