Start Debugging

タグ: csharp

336 件 · ページ1/34

C# の Lazy<T>、LazyInitializer.EnsureInitialized、ダブルチェックロッキングの比較
基本は Lazy<T> を使ってください。ファクトリを 1 回だけ実行し、例外をキャッシュし、初期化後の読み取りは計測できないほど軽量です。多数のフィールドや配列スロットを遅延初期化していて、値ごとの追加オブジェクトを避けたい場合は LazyInitializer.EnsureInitialized を使います。手書きのダブルチェックロッキングは、.NET 10 ではほとんど割に合いません。
2026-10-21 mcpdotnetcsharp
MCP C# SDK 2.3: McpClient.ServerInfo が null 許容になりました。ビルドに影響する可能性があります
2026年10月20日にリリースされた ModelContextProtocol 2.3.0 では、2026-07-28 のサーバーが server/discover で自身の識別情報を省略できるため、McpClient.ServerInfo が Implementation から Implementation? に変わりました。その理由、警告をエラー扱いにしている場合に何が壊れるか、1 行で済む修正方法を解説します。
.NET でインドのラーク/クロール方式の桁区切りで数値をフォーマットする方法 (NumberGroupSizes)
en-IN カルチャを使うか NumberFormatInfo.NumberGroupSizes を [3, 2] に設定すると、C# で 123,456,789 ではなく 12,34,56,789 と出力できます。.NET 10 と .NET 11 RC1 で検証し、配列の仕組み、CurrencyGroupSizes が別である理由、欧米式の桁区切りが黙って出力されるインバリアントグローバリゼーションの落とし穴、ラーク/クロールの単位表記ヘルパーを解説します。
.NET Extensions 10.11: バッファーされたログがついにスコープを保持できるようになりました
2026-10-15 にリリースされた Microsoft.Extensions.Telemetry 10.11.0 は、グローバルおよびリクエスト単位のログ バッファリングに実験的な IncludeScopes オプションを追加しました。これにより BeginScope の OrderId や TenantId が、黙って失われることなく Flush() 後も残ります。
C# の `with` 式は実際に何をコピーするのか、そしてレコードの計算プロパティが再計算されないのはなぜか
with 式はレコードのコンパイラー生成メソッド <Clone>$ を呼び出し、そこでコピーコンストラクターが全インスタンスフィールドをコピーし、すべての初期化子をスキップします。そのため、他のプロパティから初期化されるプロパティ、キャッシュされた値、Guid の ID は古いまま残ります。.NET 10 と C# 14 で計測し、実際に有効な対処法を紹介します。
C# の ref-safe-context とは何か、コンパイラーは ref ローカルのそれをどう決めるのか
ref-safe-context は、変数への参照が有効であり続けるスコープです。4 つのコンテキスト、ref ローカルのコンテキストが初期化子で固定されるというルール、ref 再代入がコンテキストを広げることも狭めることもできない理由、そこから生じる CS8157、CS8168、CS8374、CS9079 のエラーを、C# 14 と .NET 10、.NET 11 RC1 のコンパイラー出力とともに解説します。
FileSystemWatcher とポーリングの比較: .NET でネットワーク共有上のファイル変更を検出する
SMB や NFS の共有では、ポーリングが信頼できる情報源であり、FileSystemWatcher はせいぜいヒントにすぎません。FileSystemWatcher は Linux と macOS ではリモートの変更を見逃し、ネットワーク上の 64 KB バッファーであふれ、接続が切れると完全に停止します。定期的なスナップショットの差分を使い、ウォッチャーは早めのスキャンを促すだけにしてください。.NET 10.0.10 で検証済みです。
C# で待機するときの Thread.Sleep と Task.Delay と SpinWait の違い
非同期コードでの時間指定の待機には await Task.Delay を使い、Thread.Sleep は自分が所有する専用スレッドでのみ使い、SpinWait はロックフリーのコード内でのマイクロ秒未満の待機にだけ使います。条件を待つ場合は、この 3 つではなくシグナル (ManualResetEventSlim、SemaphoreSlim、TaskCompletionSource) を使ってください。.NET 10.0.10 で計測しています。
次へ