注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #124436 Remove ForceENC
- #124431 Fix empty host parsing regression
- #124303 Replace MethodDescCallSite with UnmanagedCallersOnly for Priority 1 c…
- #124142 Support ISO 8601 24:00 (end-of-day) in DateTime/DateTimeOffset/TimeOnly parsing
- #123921 A few fixes in the threadpool semaphore. Unify Windows/Unix implementation of LIFO policy.
- #123588 Add RequiresUnsafe trimming analyzer capabilities
- #116193 Inconsistent MemoryCache stats
#124436 Remove ForceENC
- 作成者: @noahfalk
- 作成日時: 2026年02月15日 00:54:11(UTC)
- マージ日時: 2026年02月15日 06:28:00(UTC)
- ラベル: area-VM-coreclr
概要
レガシーで未ドキュメント化された UNSUPPORTED_ForceEnc 環境変数をCoreClrから削除し、サポート対象の DOTNET_MODIFIABLE_ASSEMBLIES 設定に統一します。Edit and Continue (EnC) 機能の有効化判定とApply Update機能の確認ロジックから ForceEnc の参照を削除しており、設定オプションの簡素化と一貫性向上が目的です。
変更内容
- src/coreclr/vm/eeconfig.h:
ForceEnc()アクセサメソッドとfForceEncフィールドを削除 - src/coreclr/vm/eeconfig.cpp:
fForceEncの初期化およびUNSUPPORTED_ForceEnc設定の読み込みを削除 - src/coreclr/vm/ceeload.cpp: モジュールのEnC有効化判定ロジックで
g_pConfig->ForceEnc()の使用を廃止 - src/coreclr/vm/assemblynative.cpp:
AssemblyNative_IsApplyUpdateSupported()メソッドでg_pConfig->ForceEnc()の使用を廃止 - src/coreclr/inc/clrconfigvalues.h:
UNSUPPORTED_ForceEncの設定値定義を削除
パフォーマンスへの影響
影響なし
関連Issue
#124017 の一部対応(VS側の対応と共に完全解決予定)
その他
- これは 破壊的変更 です。
UNSUPPORTED_ForceEnc環境変数に依存していたコードはDOTNET_MODIFIABLE_ASSEMBLIESへの移行が必要です - 本PRはランタイムの内部実装の簡素化であり、公開APIには直接影響しません
- Visual Studio側の対応待ちのため、Issue #124017 の完全解決はまだ保留状態です
#124431 Fix empty host parsing regression
- 作成者: @MihaZupan
- 作成日時: 2026年02月14日 22:46:30(UTC)
- マージ日時: 2026年02月15日 02:09:26(UTC)
- ラベル: area-System.Net
概要
System.Private.Uri の空のホスト解析に関する回帰バグを修正しました。#121671 で導入された条件チェック end < length が、実際の範囲チェックではなく単に end が更新されたかどうかの確認になっていた問題を修正しています。
変更内容
- src/libraries/System.Private.Uri/src/System/Uri.cs: 条件チェックの修正(1行変更)
- src/libraries/System.Private.Uri/tests/FunctionalTests/UriCreateStringTests.cs: 回帰テストケースの追加(17行追加)
パフォーマンスへの影響
影響なし。この修正は URI パース時の条件判定ロジックの正確性向上であり、パフォーマンス特性に変化はありません。
関連Issue
- #124426(修正対象のバグ)
- #121671(回帰を引き起こした PR)
その他
本修正は既存機能の正確性を回復させるものです。回帰テストが追加されており、同様の問題の再発防止が図られています。空のホスト値を含む URI の解析に関わるシナリオでの動作が改善されます。
#124303 Replace MethodDescCallSite with UnmanagedCallersOnly for Priority 1 c…
- 作成者: @AaronRobinsonMSFT
- 作成日時: 2026年02月11日 23:31:39(UTC)
- マージ日時: 2026年02月15日 04:44:00(UTC)
- ラベル: area-VM-coreclr
概要
このPull Requestは、.NET runtimeの複数の重要な相互運用呼び出しサイトを、従来のMethodDescCallSite/CallDescrWorkerからUnmanagedCallersOnly属性を使用した新しいマネージドラッパーに置き換えています。EventSource初期化、スタートアップフック、ローダー割り当て、カルチャ情報管理、JITメタデータ取得など、優先度の高い7つの重要な相互運用地点を対象としています。
変更内容
- マネージドラッパー追加: LoaderAllocator.cs、RuntimeHandles.cs、StubHelpers.csに
[UnmanagedCallersOnly]属性を持つマネージドメソッドを追加(合計139行) - EventSource初期化: corhost.cpp、EventSource.csを更新して初期化フローを最適化
- スタートアップフック: StartupHookProvider.csで新しい呼び出し機構を実装
- 相互運用ユーティリティ: interoputil.cpp/hを拡張してColorMarshaler、CultureInfo関連の呼び出しをサポート
- 動的メソッド支援: dynamicmethod.cpp/hを大幅に更新(98行変更)してResolver.GetJitContext等を実装
- スレッド管理: threads.cpp/hから従来のCultureInfo呼び出しコード(47行)を削除
- WebAssembly対応: wasm callhelpers関連ファイルを更新(callhelpers-reverse.cpp: 400行規模の変更)
パフォーマンスへの影響
改善期待あり。UnmanagedCallersOnly属性を使用した直接呼び出しは、従来のMethodDescCallSiteによる間接呼び出しより低オーバーヘッドと考えられます。ただし、具体的なベンチマーク数値はPR情報内に記載されていません。メモリ割り当て削減とランタイムオーバーヘッド軽減が期待される優先度1の変更です。
関連Issue
#123864(大規模な相互運用最適化イニシアティブの一部)
その他
- 複数のネイティブコンポーネント(C++)とマネージドコンポーネント(C#)にまたがる広範な変更
- WebAssemblyプラットフォーム固有の対応が含まれている
- コアライブラリの基本的な機能(カルチャ管理、イベント生成、メモリ割り当て)に影響する重要な変更
- copilot-reviewerの自動レビューが実施されており、24/25ファイルで検証済み
#124142 Support ISO 8601 24:00 (end-of-day) in DateTime/DateTimeOffset/TimeOnly parsing
- 作成者: @Copilot
- 作成日時: 2026年02月08日 10:22:16(UTC)
- マージ日時: 2026年02月15日 01:05:21(UTC)
- ラベル: area-System.DateTime
概要
ISO 8601の24:00:00(日の終わり)をサポートするため、DateTime、DateTimeOffset、TimeOnly、Utf8Parser、System.Text.Jsonのパース機能を拡張しました。24:00:00は翌日の00:00:00と同じ時点として正規化されます。この機能は分秒がいずれも0の場合のみ有効です。
// 2007-04-05T24:00 は 2007-04-06T00:00:00 と解析される
var dt = DateTimeOffset.Parse("2007-04-05T24:00");
// dt == new DateTimeOffset(2007, 4, 6, 0, 0, 0, TimeSpan.Zero)
変更内容
- DateTime.cs:
TryCreateメソッドで24時間の場合、時間を0に設定し、後で1日加算 - DateTimeParse.cs:
TryParseFormatO、DoStrictParse、ParseISO8601、ProcessDateTimeSuffixで24:00対応 - Utf8Parser.Date.Helpers.cs:
TryCreateDateTimeで24時間対応 - JsonHelpers.Date.cs: JSON解析時の24:00対応
- テスト: DateTime/DateTimeOffset/TimeOnly/Utf8Parser/JSON解析で合計51個の新規テスト追加
パフォーマンスへの影響
影響なし。パース処理に簡潔な条件分岐のみを追加しており、通常の時間値(0-23)に対するパフォーマンス低下はありません。
関連Issue
#12197(ISO 8601の24:00:00サポート要求)
その他
重要な制限事項:
- 24時間が有効なのは分と秒(フラクション含む)がすべて0の場合のみ
- 9999-12-31T24:00は日付オーバーフローため拒否(正規化で2010-01-01になるため)
- ISO 8601-1:2019/Amendment 1:2022で24:00サポートが再追加されたことに基づく実装
設計方針:
- すべてのパース経路で統一的なアプローチ(時間を0に設定し、最後に1日加算)を採用
- JSON Z-suffixed hour=24テストは既存のUTC対応パターンに準拠
#123921 A few fixes in the threadpool semaphore. Unify Windows/Unix implementation of LIFO policy.
- 作成者: @VSadov
- 作成日時: 2026年02月02日 23:42:36(UTC)
- マージ日時: 2026年02月15日 02:14:43(UTC)
- ラベル: area-System.Threading
概要
ThreadPool のセマフォ実装に関する複数の修正と改善が行われました。主な変更は以下の通りです:
- Backoff.Exponential(0) のバグ修正 - シフト演算のマスキングによる問題を解決
- Windows/Unix の LIFO ポリシー実装の統一 - プラットフォーム固有の実装を統一された軽量な実装に置き換え
- 適応的なスピニング - CPU コアの利用可能性に基づく動的スピニング調整
// Backoff.Exponential(0) の修正例
// 修正前:attempt==0 時にシフト量が 0 になり、大きなランダム値が使用される
// 修正後:正しく 1 ビット右シフトされる
変更内容
| ファイル | 変更内容 |
|---|---|
Backoff.cs |
Exponential バックオフのシフト計算修正 |
LowLevelLifoSemaphore.cs |
プラットフォーム非依存の LIFO セマフォ実装(248 行追加) |
LowLevelLifoSemaphore.Windows.cs/.Unix.cs |
削除(統一実装へ移行) |
LowLevelFutex.Windows.cs/.Unix.cs |
新規:低レベル futex 実装 |
LowLevelThreadBlocker.cs |
新規:軽量スレッドブロッキング実装(182 行) |
PortableThreadPool.WorkerThread.cs |
スレッドブロック処理の簡素化 |
pal_threading.c/.h |
Unix futex/WaitOnAddress の native 実装 |
パフォーマンスへの影響
改善点:
- 統一された LIFO 実装がプラットフォーム固有実装(Unix WaitSubsystem、Windows GetQueuedCompletionStatus)より高速化
- Unix WaitSubsystem の グローバルロック競合を排除
- 軽量な LIFO 待機メカニズムにより、スレッドウェイク時のオーバーヘッド削減
懸念点:
- Backoff.Exponential(0) の修正により一部シナリオで長いスピン恩恵を受けていた場合、性能特性が変化
- 適応的スピニングのヒューリスティックは継続的な改善が必要
関連Issue
#123159
その他
- 適応的スピニングは CPU コア利用可能性の推定に基づいており、シナリオ依存的なスピン時間の最適化を実現
- 統一実装により、プラットフォーム間での動作の一貫性が向上し、デバッグが容易化
- ドキュメント(interop-guidelines.md)も更新され、新しいネイティブ API 統合を反映
#123588 Add RequiresUnsafe trimming analyzer capabilities
- 作成者: @agocke
- 作成日時: 2026年01月25日 00:43:53(UTC)
- マージ日時: 2026年02月15日 18:18:38(UTC)
- ラベル: linkable-framework area-Tools-ILLink
概要
RequiresUnsafe属性に対応したトリミング解析機能を追加するデバッグ専用の実装です。フレームワークに注釈を付けるための補助機能であり、本番環境での提供を想定していません。Roslyn解析器とコードフィックスプロバイダーを通じて、unsafeコンテキスト外での安全でないコード使用を検出し、自動修正を提供します。
// 新規追加: RequiresUnsafeAttribute
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public sealed class RequiresUnsafeAttribute : Attribute
{
}
変更内容
- RequiresUnsafeAttribute.cs: 新規属性定義を追加(19行)
- RequiresUnsafeAnalyzer.cs: 解析ルールの実装(107行)-
RequiresUnsafeで標記されたメンバーの安全でない使用検出 - RequiresUnsafeCodeFixProvider.cs: 自動修正機能の実装(541行)-
unsafeキーワードの挿入または属性の伝播 - DynamicallyAccessedMembersAnalyzer.cs: 既存解析器の拡張(+11行)
- テストコード: 解析器テスト(401行)とコードフィックステスト(1913行)を追加
- MSBuild設定: ILLink解析器プロパティ追加
- リソース: 診断メッセージと修正メッセージ定義(SharedStrings.resx等)
パフォーマンスへの影響
影響なし。デバッグ専用モードであり、本番環境での利用を想定していないため、パフォーマンスに関わる最適化や計測値の記載はありません。
関連Issue
記載なし
その他
- 本実装はデバッグ専用であり、フレームワーク注釈付けの補助ツールとして位置付けられています。
- 既存の
RequiresAnalyzerBaseクラスを継承する設計で、他のRequires*系解析器(RequiresUnreferencedCode等)との統一性を保持しています。 - CompatibilitySuppressions.xmlの更新により、既知の抑制ルールが維持されています。
#116193 Inconsistent MemoryCache stats
- 作成者: @pedrobsaila
- 作成日時: 2025年06月01日 12:53:37(UTC)
- マージ日時: 2026年02月15日 14:48:42(UTC)
- ラベル: area-Extensions-Caching community-contribution
概要
MemoryCacheの統計情報の不整合を修正するPull Requestです。キャッシュの統計カウンターが不正確な状態になる問題に対応しており、メモリキャッシュの正確なメトリクス追跡を改善します。
変更内容
- ファイル:
src/libraries/Microsoft.Extensions.Caching.Memory/src/MemoryCache.cs- 33行追加、18行削除
- MemoryCacheの統計情報計算ロジックを修正
パフォーマンスへの影響
影響なし。統計情報の正確性向上であり、キャッシュのパフォーマンスに直接的な影響はありません。ただし、統計情報の計算ロジックが修正されることで、メトリクス報告の精度が向上します。
関連Issue
#108333(統計情報の不整合に関するIssue)
その他
複数のレビュワーによる確認がされており、言語・ライブラリチーム内での検証を経ています。MemoryCacheの診断やモニタリングに依存するアプリケーションにおいて、より正確な統計情報が得られるようになります。