注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #132021 Add ILLink Copilot instructions
- #132019 Allow runtime monitor stages with no Helix jobs
- #132005 Add kotlarmilos as a WebAssembly area owner
- #131986 Remove OpenBSD system tools support
- #131977 [cDAC] Restore non-stub method resolution in GetRuntimeNameByAddress
- #131975 [release/10.0] Fix address sanitizer issues
- #131971 Consolidate libraries Helix submissions
- #131967 Disable GC/API/Refresh test when using segments GC flavor
- #131965 [cDAC] Implement IXCLRDataStackWalk.GetStackSizeSkipped
- #131964 Tweak Copilot Instructions for S.S.Cryptography
- #131963 Harden async-profiler dispatcher/wrapper frame name contract for callstack stitching.
- #131962 createdump: fix macOS arm64 thread IDs in LLDB
- #131958 Fix documentation signatures for nested type references
- #131955 Disable timing out EncryptedXml encoded-DTD tests
- #131947 Fix AV in gc_heap::init_heap_segment
- #131943 Improve TlsSession error diagnostics
- #131903 Unify StubLinker stub memory management with JIT code allocator
- #131900 Clarify ObjectInstance behavior when no owning object is available
- #131884 JIT: home dead-at-entry wasm GC register params reported to the GC
- #131832 Fix thread-count runaway in GC/Scenarios/THDChaos test
- #131806 Fix validated part uri equality
- #131779 Use released TFM for cDAC projects where supported
- #131740 [Release 10.0] Support hardware with more than 1024 CPUs
- #131735 [release/10.0] [mono][AOT] gsharedvt - stop validating generic constraints
- #131666 Trim unused CoreCLR native components from dotnet-linker-tests build
- #131658 [wasm] Emit webcil payloadSize/tableSize into boot config for streaming instantiation
- #131352 Round-trip TimeZoneInfo.ToSerializedString on Unix (#19794)
- #131342 Remove boxing for awaited custom awaiters
- #131177 Remove queue-subdispatching pattern to the ThreadPool global queue
- #118075 Add Compliance tests for GB18030-2022
#132021 Add ILLink Copilot instructions
- 作成者: @sbomer
- 作成日時: 2026年08月07日 18:16:50(UTC)
- マージ日時: 2026年08月07日 18:50:45(UTC)
- ラベル: area-Infrastructure linkable-framework
概要
ILLink/ILC/ILLinkアナライザー/ILTrimに関連する共有トリミングテストの変更に対して、GitHub Copilotガイダンスを提供するためのパス範囲指定インストラクションファイルを追加しました。このPRは、トリミング関連の変更がILLink、ILC、ILLinkアナライザー、ILTrimの4つのコンポーネントに対応していることを確認するよう貢献者をガイドします。
変更内容
.github/instructions/illink.instructions.md(新規):共有トリミングテスト向けのCopilotガイダンスを追加。ILLink、ILC、アナライザー、ILTrimへの対応とサポート外ケースの既存の予期された失敗規則への誘導を含む。.github/instructions/csharp.instructions.md:illink領域固有インストラクションファイルへの言及を追加。.github/instructions/conventions.instructions.md:illink領域固有インストラクションファイルへの言及を追加。
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPull Requestはネットワーク構成管理やドキュメント変更です。実際のランタイム機能やコンパイラの動作変更は含まれていません。GitHub Copilotの支援により作成されました。
#132019 Allow runtime monitor stages with no Helix jobs
- 作成者: @mmitche
- 作成日時: 2026年08月07日 17:35:58(UTC)
- マージ日時: 2026年08月07日 22:23:55(UTC)
- ラベル: area-Infrastructure
概要
Azure DevOps runtime パイプラインにおいて、パス フィルタリングにより Helix ジョブが送信されなかった場合でも、Helix job monitor ステップが成功するように変更します。既存の Arcade 公開済み allowNoHelixJobs テンプレート オプションを使用します。
変更内容
- eng/pipelines/runtime.yml: Helix job monitor テンプレート呼び出しに
allowNoHelixJobsオプションを設定(+2 行) - パス フィルタリングシナリオの説明コメントを追加
パフォーマンスへの影響
影響なし
関連Issue
その他
なし
#132005 Add kotlarmilos as a WebAssembly area owner
- 作成者: @kotlarmilos
- 作成日時: 2026年08月07日 14:04:14(UTC)
- マージ日時: 2026年08月07日 16:20:14(UTC)
- ラベル: area-Meta
概要
WebAssembly関連領域の所有者メタデータを更新し、@kotlarmilosをos-wasi、os-browser、arch-wasmの領域オーナーとして追加するもの。
変更内容
- docs/area-owners.md:
@kotlarmilosをos-wasi、os-browser、arch-wasmのコーリードとして追加(+3/-3)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRはドキュメント更新のみで、実装コードの変更は含まれていません。GitHubのissueやPRのルーティング・アサインメント対象者の管理に関わる変更です。
#131986 Remove OpenBSD system tools support
- 作成者: @am11
- 作成日時: 2026年08月07日 04:14:24(UTC)
- マージ日時: 2026年08月07日 14:19:41(UTC)
- ラベル: area-Infrastructure community-contribution os-openbsd
概要
OpenBSD システム上での混合ツールチェーンの非互換性問題を解決するため、OpenBSD のプリインストール ツール サポートを削除し、ユーザーに llvm パッケージの明示的なインストール(pkg_add llvm)を要求するようにしました。OpenBSD では OS 付属の nm(独自実装)、LLVM の ar/ranlib、GNU の strings/objcopy が混在しており、これらの互換性を維持するための複雑な回避策を避けることが目的です。
変更内容
- eng/native/configuretools.cmake: OpenBSD サポートの条件判定ロジックを変更(+1/-1)
パフォーマンスへの影響
影響なし
関連Issue
その他
- 変更によりユーザーが OpenBSD 上でビルドする際は、事前に
pkg_add llvmでクリーンな LLVM ツールチェーンをインストールすることが必須になります - 本パッチは新規 VM でのネイティブ ビルドで検証済み
#131977 [cDAC] Restore non-stub method resolution in GetRuntimeNameByAddress
- 作成者: @rcj1
- 作成日時: 2026年08月07日 01:44:39(UTC)
- マージ日時: 2026年08月07日 06:01:52(UTC)
- ラベル: area-Diagnostics-cdac
概要
#127134で削除された非スタブメソッドの解決機能を復元するもの。cDAC/DAC消費者が、インタープリタープリコード/エントリポイントなどのアドレスからマネージドメソッド名を解決できるようにする。
変更内容
- SOSDacImpl.IXCLRDataProcess.cs:
IXCLRDataProcess.GetRuntimeNameByAddressにインタープリタープリコードマッピング後のCodeBlockHandle解決機能を追加。マネージドメソッド名フォーマット処理をヘルパーメソッドに分離。 - daccess.cpp:
ClrDataAccess::RawGetMethodNameにインタープリターエントリポイントマッピング後のEECodeInfoベースの解決パスを追加。スタブマネージャー分類にフォールバックする前に完全なマネージドメソッド名を返す。
パフォーマンスへの影響
影響なし
関連Issue
その他
Copilot指摘事項:
- 新機能(特にdisplacement値)のユニットテスト(正常なマネージドコードアドレスおよびインタープリタープリコードマッピング)が不足している。既存の
IXCLRDataProcessTests.csにテスト追加が推奨される。 - ReadyToRun(R2R)ホット/コールド分割メソッドにおいて、displacementがアドレス空間の差分で計算されており、論理的コードオフセットと異なる可能性がある。
ExecutionManager.GetRelativeOffset使用を推奨。
#131975 [release/10.0] Fix address sanitizer issues
- 作成者: @github-actions[bot]
- 作成日時: 2026年08月07日 00:23:51(UTC)
- マージ日時: 2026年08月07日 22:22:33(UTC)
- ラベル: Servicing-approved area-VM-coreclr
概要
Address Sanitizer有効化時の不正なメモリ操作を修正するバックポート。内部顧客がAddress Sanitizer有効な.NET 10で発生していた2つの問題(スコープ解決演算子::deleteの不正使用、配列削除時の型不一致)を修正します。ランタイム動作への変更はなく、ソースコードの正当性の向上です。
変更内容
src/coreclr/utilcode/ex.cpp: 基底クラスポインタに対する
::delete呼び出しの削除(5行削除)- スコープ解決演算子を使用した削除では、コンパイラがサイズ確定delete(sized delete)を使用し、基底クラスのサイズで呼び出されるため不正な動作
src/coreclr/vm/ceeload.cpp: 配列削除時の型不一致を修正(2行追加/2行削除)
- 非配列delete演算子による配列削除の不正な操作を修正
パフォーマンスへの影響
影響なし
関連Issue
その他
- このPRは主ブランチの修正を
release/10.0にバックポートしたもの - Address Sanitizer有効な環境でのビルドと既存のcoreclrテストで検証済み
- 危険度:低(正当性修正のみでランタイム動作変更なし)
- .NET 8から.NET 10への移行での互換性維持に貢献
#131971 Consolidate libraries Helix submissions
- 作成者: @agocke
- 作成日時: 2026年08月06日 21:43:06(UTC)
- マージ日時: 2026年08月07日 23:43:55(UTC)
- ラベル: area-Infrastructure-libraries
概要
Helix Job Monitor有効時に、ライブラリのHelix送信を独立したテスト実行ジョブから統合CoreCLR/librariesビルドジョブへ移動します。これにより、13個のアーティファクト専用テスト実行ジョブを削除し、ライブラリテストアーティファクトの発行とダウンロードのオーバーヘッドを回避します。プラットフォームマトリックス、Helixキュー、条件、実行時構成、テスト実行名は維持されます。
変更内容
- eng/pipelines/runtime.yml:既存ビルドジョブにライブラリHelix送信を統合し、スタンドアロンのlibrariesテスト実行ジョブマトリックスを削除。パス基準の変更検出変数(
librariesContainsChange、coreclrContainsChange)を追加してHelix送信を制御。 - eng/pipelines/libraries/helix.yml:
helixBuildConfigパラメータを追加し、Helix/p:Configurationをプロデューサージョブのビルド構成から切り離す。これにより、ビルド構成が異なるプロデューサージョブ向けに別途の送信構成を指定可能に。
パフォーマンスへの影響
CI/CDパイプラインの効率化:13個のアーティファクト専用ジョブの削除により、テストアーティファクトの発行とダウンロード処理が不要になり、パイプライン実行時間が短縮されます。ただし、具体的な実行時間削減率やベンチマーク数値は提供されていません。
関連Issue
なし
その他
- Helix Job Monitorが有効な場合のみこの最適化が適用されます
- 既存のプラットフォームマトリックス、Helixキュー、条件、実行時構成、テスト実行名はすべて保持され、外部への影響は最小限に抑えられています
- 本PRはGitHub Copilotを使用して作成されました
#131967 Disable GC/API/Refresh test when using segments GC flavor
- 作成者: @janvorli
- 作成日時: 2026年08月06日 20:59:27(UTC)
- マージ日時: 2026年08月07日 08:45:18(UTC)
- ラベル: area-GC-coreclr
概要
GC/API/Refresh テストが segments GC フレーバー使用時に不適切に実行されるのを防ぐため、テストの無効化条件を改善しました。従来はアーキテクチャベースの判定のみでしたが、regions GC 非対応ターゲットでの segments GC フレーバーの clrgc.dll テスト時に問題が生じていました。
変更内容
- src/tests/GC/API/Refresh/Refresh.cs: テストの無効化ロジックを修正(+17行/-1行)
- segments GC フレーバー使用時の検出条件を追加し、64ビットアーキテクチャでのテスト実行を適切に制御
パフォーマンスへの影響
影響なし
関連Issue
その他
なし
#131965 [cDAC] Implement IXCLRDataStackWalk.GetStackSizeSkipped
- 作成者: @rcj1
- 作成日時: 2026年08月06日 20:56:57(UTC)
- マージ日時: 2026年08月07日 23:03:03(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Component Data Access Contract)のIXCLRDataStackWalkインターフェースにGetStackSizeSkippedメソッドを実装しました。このメソッドは、スタックウォーク中にスキップされたバイト数を取得するために使用されます。契約変更はありません。
変更内容
- ClrDataStackWalk.cs:
GetStackSizeSkippedメソッドを実装し、内部状態の_stackSizeSkippedフィールドを返すロジックを追加 - StackWalkTests.cs: 新しいユニットテストを追加し、スタックウォーク中のスキップされたバイト数が正しく報告されることを検証
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
Copilotが指摘した懸念事項:
- 現在の実装は、スタックウォークが終了した状態(
_currentFrameIsValid == false)でもS_OKを返し、陳腐化した値を返す可能性があります。これは他のIXCLRDataStackWalkゲッターメソッド(GetContext、GetFrameTypeなど)やレガシーDAC実装と一貫性がありません - ユニットテストは単一のフィルタリングステップのケースをカバーしていますが、ウォーク終了後の動作(
Next()がS_FALSEを返した後)はカバーされていません - 推奨される改善:スタックウォークに現在のフレームがない場合に
S_FALSEを返し、出力ポインタが提供されている場合は0を書き込むべき
#131964 Tweak Copilot Instructions for S.S.Cryptography
- 作成者: @vcsjones
- 作成日時: 2026年08月06日 20:06:10(UTC)
- マージ日時: 2026年08月07日 02:43:53(UTC)
- ラベル: area-System.Security
概要
System.Security.Cryptography関連のPull Requestに対するCopilot AIの指示内容を調整しました。Copilotが無関係なフォーマッティング修正を過剰に提案することを防ぐため、既存のフォーマッティング問題の修正タイミングを明確化しています。
変更内容
.github/instructions/system-security-cryptography.instructions.md: Copilot指示ファイルを更新し、既存コードのフォーマッティング問題を修正する条件を明確化(1行追加)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRは開発ツール(Copilot指示)の調整であり、ランタイムやライブラリコードへの変更ではありません。目的は、System.Security.Cryptography領域でのPull Request品質向上と、無関係な変更混在の防止です。
#131963 Harden async-profiler dispatcher/wrapper frame name contract for callstack stitching.
- 作成者: @lateralusX
- 作成日時: 2026年08月06日 19:31:44(UTC)
- マージ日時: 2026年08月07日 09:57:18(UTC)
- ラベル: area-System.Runtime.CompilerServices
概要
非同期プロファイラーのdispatcher/wrapperフレーム名契約を強化し、コールスタック結合の堅牢性を向上させます。V1ディスパッチフレームに[StackTraceHidden]属性を追加し、V2と一貫性を持たせます。同時に、診断ツールが依存するメソッド/型名を名前契約コメントで明示し、環境変数DOTNET_AsyncProfilerEventSource_EventBufferSizeをDOTNET_AsyncProfiler_EventBufferSizeにリネームします。
変更内容
ランタイム(
System.Private.CoreLib):V1ディスパッチフレーム(InstrumentedMoveNext、MoveNextAsDispatcher、AsyncStateMachineDispatcher.MoveNext)に[StackTraceHidden]属性を追加し、マネージドスタックトレースから隠蔽(物理スタックとスタックトレースメタデータには保存)名前契約:診断ツール(スティッチャー)が名前に基づいて依存するメソッド・型に統一されたコメントを記述
環境変数リネーム:未リリースの診断設定用環境変数を名前変更し、不要な
usingを削除テスト(
System.Threading.Tasks.Tests):- 名前契約テスト:スティッチャーがハードコードするV1/V2ディスパッチメソッド、V2継続ラッパー(全32個)を固定
- フレームキャプチャテスト:継続再開時の物理マネージドスタックを捕捉し、V1単一yield、V1プーリング、V2単一yield、V1インライン完了など複数シナリオでフレーム順序を検証
テスト実行は
DiagnosticMethodInfo(リフレクションの代わり)を使用し、CoreCLR/Mono/NativeAOT互換
パフォーマンスへの影響
影響なし。[StackTraceHidden]はスタックトレース表示のみに影響し、非同期ディスパッチ動作は変わりません。
関連Issue
その他
互換性への影響なし。[StackTraceHidden]の追加はV1フレームをマネージドスタックトレースから隠蔽するのみで、環境変数リネームは未リリース機能対象のため破壊的変更ではありません。テストはランタイム機能(V1はCoreCLR+Mono対応、V2はCoreCLR+NativeAOT対応)に応じてゲートされています。
#131962 createdump: fix macOS arm64 thread IDs in LLDB
- 作成者: @max-charlamb
- 作成日時: 2026年08月06日 19:19:47(UTC)
- マージ日時: 2026年08月07日 16:52:17(UTC)
- ラベル: area-Diagnostics-coreclr
概要
macOS arm64環境におけるcreatedumpの thread-info 領域をLLDB互換の形式で生成するよう修正しました。LLDB の process metadata LC_NOTE 形式を使用してOS thread IDを出力し、既存の SpecialThreadInfo セグメントも保持することで段階的な移行をサポートします。
Apple Silicon LLDBが従来の合成セグメント(0x7fffffff00000000)を拒否する問題に対応し、SOS がLLDB スレッドとランタイムのOS thread IDを正しく関連付けられるようにします。
変更内容
- dumpwritermacho.cpp: LLDB
LC_NOTE形式のthread-info領域を書き込む処理を追加(43行追加) - dumpwritermacho.h: thread-info出力用のヘッダー定義を追加(3行追加)
- specialthreadinfo.h: 既存の
SpecialThreadInfoセグメント定義にLLDB形式対応の構造体フィールドを追加(6行追加)
パフォーマンスへの影響
影響なし
関連Issue
その他
- 本修正は diagnostics リポジトリの対応変更と連携しています(dotnet/diagnostics#5953)
- 先行事例として steveisok による
SpecialDiagInfoAddressのApple Silicon対応(runtime#130443、diagnostics#5823)に従っています - テストは diagnostics の macOS arm64 での検証待ちの状態(ドラフト段階)
#131958 Fix documentation signatures for nested type references
- 作成者: @sbomer
- 作成日時: 2026年08月06日 17:40:56(UTC)
- マージ日時: 2026年08月07日 20:01:08(UTC)
- ラベル: linkable-framework area-Tools-ILLink
概要
ネストされた型参照のドキュメンテーション署名フォーマッティングを修正し、クロスアセンブリ参照でのIL1012クラッシュを防止します。通常のネストされた型では宣言型のTypeReferenceを直接使用し、ネストされたジェネリック型ではジェネリックパラメータの数を正確に解決することで、各レベルが自身のパラメータのみを受け取るようにします。
変更内容
- TypeReferenceExtensions.cs: 宣言型の処理を更新し、ジェネリックパラメータ数を計算するヘルパーメソッドを追加
- DocumentationSignatureGenerator.PartVisitor.cs (linker/ILCompiler両対応): ネストされたジェネリック型のアリティ計算を修正し、ゼロアリティのネストされた型に対してジェネリック括弧を出力しないように改善
- テストケース追加: クロスアセンブリおよび同一アセンブリの参照を含む、ネストされた型のパラメータ・戻り値署名に関する回帰テスト
- テスト用ライブラリ: ネストされた型およびネストされたジェネリック型を定義する依存アセンブリを新規追加
- ILTrimExpectedFailures.txt: 期待される失敗リストを更新
パフォーマンスへの影響
影響なし
関連Issue
その他
- この変更はリンカー内部実装の修正であり、公開APIの変更ではありません
- アセンブリ境界を超えたネストされた型参照の処理でのクラッシュ(IL1012エラー)を解決するリグレッション修正です
- GitHub Copilotアシスタンスで作成されました
#131955 Disable timing out EncryptedXml encoded-DTD tests
- 作成者: @Copilot
- 作成日時: 2026年08月06日 16:26:21(UTC)
- マージ日時: 2026年08月07日 07:26:18(UTC)
- ラベル: area-System.Security
概要
EncryptedXmlのエンコードされたDTD変換チェーンテストのタイムアウト問題に対応したテスト無効化対応です。ワークロード削減後も継続してタイムアウトしている問題に対して、特定のテストケースを無効化しながら、デフォルト制限による拒否カバレッジは保持しています。
変更内容
- src/libraries/System.Security.Cryptography.Xml/tests/EncryptedXmlTests.cs: exact-limit と unlimited-chain のテストケースを無効化(2行追加)
パフォーマンスへの影響
テストの実行時間が短縮されます。ただし、タイムアウトしていたテストを無効化する対応であるため、根本的なパフォーマンス改善ではなく、テスト実行の安定性向上が目的です。
関連Issue
その他
- テスト無効化はActive Issue(#131638)の元で実施されています
- デフォルト制限による拒否テストは引き続き実行され、カバレッジを維持しています
- 根本的な修正はまだ未対応の状態です
#131947 Fix AV in gc_heap::init_heap_segment
- 作成者: @janvorli
- 作成日時: 2026年08月06日 15:26:55(UTC)
- マージ日時: 2026年08月07日 13:18:52(UTC)
- ラベル: area-GC-coreclr
概要
GCヒープ初期化時のアクセス違反(AV)を修正するPull Requestです。gc_heap::get_card_table_element_layoutおよびget_card_table_commit_layoutに存在するバグにより、バックグラウンドGCが無効化されている場合にseg_mapping_table_elementの最後のページがコミットされていませんでした。修正は、サイズが0の要素であってもそのレイアウト要素の開始オフセットをアラインメント要件に従うようにすることで、共有ページが含まれるようにしています。
変更内容
- src/coreclr/gc/card_table.cpp: ブックキーピング要素のレイアウトアラインメント処理を調整。サイズが0の要素でもアラインメントを適用し、後続要素のコミット範囲が共有ページを正しくカバーするようにしました。
- src/tests/GC/Regressions/Github/Runtime_129681/Runtime_129681.csproj: GCストレス・リージョン・ハードリミット環境変数を設定するリグレッション テストプロジェクトを追加。
- src/tests/GC/Regressions/Github/Runtime_129681/Runtime_129681.cs: 設定されたGC制約下でOOMに達するまでメモリを割り当てるリグレッション テストケースを追加。
パフォーマンスへの影響
影響なし
関連Issue
その他
本修正はランタイムのGCヒープ管理(内部実装)に関するバグ修正であり、公開APIには影響しません。バックグラウンドGCが無効化されている構成(concurrent GC disabled)でのリグレッション テストが含まれており、問題の再現を確認できます。
#131943 Improve TlsSession error diagnostics
- 作成者: @rzikm
- 作成日時: 2026年08月06日 13:41:17(UTC)
- マージ日時: 2026年08月07日 13:55:56(UTC)
- ラベル: area-System.Net.Security
概要
TlsSessionのOpenSSL エラー診断を改善し、SslStreamと同じ例外生成ロジックを使用するようにしました。これにより、SSL_ERROR_SYSCALLの場合にネイティブ側のerrnoを保持し、EOFと実際のI/Oエラーを正確に区別できるようになります。
変更内容
- pal_ssl.c:
SSL_get_error呼び出し前後でのerrnoの保持を追加(read/write/handshakeパス) - pal_bio.c: ソケットリプレイBIOのエラーケースで決定論的な
errno設定を追加;send() == 0をリトライ可能として扱う - TlsSession.OpenSsl.cs: 生の
SSL_*戻り値を使用し、Interop.OpenSsl.GetSslError(result, error)で例外を生成するようSslStreamとの一貫性を確保 - Interop.Ssl.cs:
SslDoHandshakeでSetLastErrorを有効化し、マネージコード側からerrnoが観測可能に - Interop.OpenSsl.cs:
GetSslErrorをinternalに変更し、TlsSessionでの再利用を可能に
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
このPRはOpenSSL/TlsSessionのネイティブ相互運用部分における内部実装の改善で、公開APIの変更はありません。診断情報の精度向上により、TLS接続エラーのデバッグが容易になります。
#131903 Unify StubLinker stub memory management with JIT code allocator
- 作成者: @Copilot
- 作成日時: 2026年08月05日 20:50:04(UTC)
- マージ日時: 2026年08月07日 13:14:58(UTC)
- ラベル: area-VM-coreclr
概要
StubLinkerが生成するスタブのメモリ管理を、専用のLoaderAllocator::m_pStubHeapからJITコード割り当て機構へ統合します。これにより、StubLinkerスタブ(shuffle thunksを含む)がJITコードと同じExecutionManager::AllocCodeFragmentBlock経由で実行可能メモリを割り当てるようになります。
// Before
Stub *Link(LoaderHeap *heap, DWORD flags, const char *stubType);
// After
Stub *Link(LoaderAllocator *pLoaderAllocator, DWORD flags, const char *stubType);
変更内容
LoaderAllocator: 専用スタブヒープフィールドm_pStubHeapと関連する初期化/終了処理/DAC機構を削除(内部実装)StubLinker/Stub:StubLinker::LinkとStub::NewStubがLoaderHeap*ではなくLoaderAllocator*を受け取り、AllocCodeFragmentBlock経由でメモリ割り当てを実行(内部実装)StubCodeBlockKind:STUB_CODE_BLOCK_STUBLINKとSTUB_CODE_BLOCK_SHUFFLE_THUNKを追加して、スタブの識別を統一(内部実装)- スタブマネージャ:
StubLinkStubManagerから範囲リストを削除し、RangeSectionStubManagerが新しいスタブタイプを認識して処理を委譲するよう変更(内部実装) - DAC/SOS:
datadescriptor.incとdebug/daccess/request.cppからスタブヒープフィールドを削除 - 呼び出し元:
stubcache.cpp、comdelegate.cpp、prestub.cpp、assembly.cpp、appdomain.hpp/.inl、class.hを更新してLoaderAllocator*を渡すよう変更
パフォーマンスへの影響
影響なし。メモリ割り当て経路の統合であり、パフォーマンス数値の提供はなし。
関連Issue
なし
その他
- 変更は全て内部実装に限定され、公開APIに対する破壊的変更なし
- Copilotのレビューでは、
DelegateEEClass::GetStubHeap()の削除提案や、DAC名前リスト(LoaderAllocatorLoaderHeapNames)と実際のヒープ列挙の不整合に関する指摘あり - メモリ管理の統一により、コード複雑性の低減とメンテナンス性の向上が期待される
#131900 Clarify ObjectInstance behavior when no owning object is available
- 作成者: @ViveliDuCh
- 作成日時: 2026年08月05日 19:45:54(UTC)
- マージ日時: 2026年08月07日 17:20:04(UTC)
- ラベル: area-System.ComponentModel.DataAnnotations
概要
ValidationContext.ObjectInstanceのXML doc commentを更新し、owning objectが存在しない検証シナリオでこのプロパティが意味のある値を持たないことを明確化しました。属性作成者による不正な仮定の防止を目的としています。
変更内容
- System.ComponentModel.DataAnnotations/ValidationContext.cs:
ObjectInstanceプロパティのdoc remarksに、ownerless/standalone検証シナリオでこのプロパティが意味のない値になることを説明するコメントを追加(+6行)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
本変更は公開APIの実装ではなく、ドキュメント(XML doc comment)の改善のみです。既存の動作や互換性に影響はありません。
#131884 JIT: home dead-at-entry wasm GC register params reported to the GC
- 作成者: @AndyAyersMS
- 作成日時: 2026年08月05日 15:30:51(UTC)
- マージ日時: 2026年08月07日 21:07:35(UTC)
- ラベル: arch-wasm area-CodeGen-coreclr
概要
WebAssemblyターゲットのJIT先頭コード生成(prolog)において、メソッド開始時に使用されていない(dead-at-entry)GCパラメータについて、GCに報告するためにスタックホーミングを強制する変更です。Wasmではフレーム上のすべてのGCローカルがGCに追跡されないまま報告されるため、deadなGCパラメータであっても安全なスタックスロットを確保する必要があります。
変更内容
- src/coreclr/jit/codegenwasm.cpp: dead-at-entry パラメータのホーミングをスキップする最適化パスを修正。
lvOnFrame && HasGCPtr()の条件を満たすGCパラメータはスキップしないように調整。Wasmでフレーム上のGCローカルが追跡されずメソッド全体で実質的にliveとされる理由についてコメントを追加。
パフォーマンスへの影響
影響なし(ただし、WasmプラットフォームではGCパラメータのホーミング処理がスキップされなくなるため、特定のケースでプロローグコードサイズがわずかに増加する可能性があります)
関連Issue
その他
この変更はWebAssemblyプラットフォーム固有のJIT動作であり、他のターゲットプラットフォームには影響しません。GCの正確性を確保するための修正です。
#131832 Fix thread-count runaway in GC/Scenarios/THDChaos test
- 作成者: @Copilot
- 作成日時: 2026年08月04日 21:31:49(UTC)
- マージ日時: 2026年08月07日 18:21:35(UTC)
- ラベル: area-System.Threading
概要
GC/Scenarios/THDChaos テストでスレッド数が制御不能に増殖し、Arm32環境でOutOfMemoryExceptionが発生する問題を修正します。スレッド生成の上限チェックが競合状態にあり、意図した数を超えるスレッドが起動されていました。Interlocked.Incrementを使用した原子的なカウント管理と、Arm32での上限値設定によって、リソース枯渇を防止します。
変更内容
- livingobject.cs —
IncreatCountメソッドをInterlocked.Incrementで実装し、返却値をチェックしてからスレッド起動判定を行うように修正。従来は静的なiCounterに対してlock(this)で保護していたため、異なるLivingObjectインスタンス間でロックが有効でなく、インクリメントが失われていました。iCounterの読み込みにはVolatile.Readを使用。 - thdchaos.cs — Arm32環境での
iThrd(スレッド上限)を5に設定。他のスレッド多用テストと同様の制限値を適用。
パフォーマンスへの影響
テスト環境のメモリ使用量・スレッド生成リソースが大幅に削減されます。Arm32での無制御なスレッド生成による OutOfMemoryException が解消され、テストの安定性が向上します。
関連Issue
その他
この修正はテストコード(src/tests配下)の修正であり、ランタイムやライブラリの公開APIへの影響はありません。問題の根本原因は、staticフィールドを複数の異なるインスタンスのlock(this)で保護していた設計的な欠陥でした。
#131806 Fix validated part uri equality
- 作成者: @alinpahontu2912
- 作成日時: 2026年08月04日 13:58:35(UTC)
- マージ日時: 2026年08月07日 17:14:54(UTC)
- ラベル: area-System.IO
概要
ValidatedPartUri の object.Equals/GetHashCode オーバーライドを削除し、System.Uri との互換性を復元しました。HashSet/Dictionary での混在利用時に不正な検索結果となる問題を解決します。一方、ValidatedPartUri の SortedList での大文字小文字非感応比較機能は IComparable/IEquatable ロジックで維持されます。
変更内容
- PackUriHelper.cs: ValidatedPartUri から Equals(object?)/GetHashCode() オーバーライドを削除し、基底 Uri の値等価性に統一。PackUriHelper.ValidatedPartUriEqualityComparer(内部 IEqualityComparer)を新規追加して大文字小文字非感応な等価性判定とハッシングを提供します。
- ZipPackage.cs: コンテンツタイプオーバーライド辞書で ValidatedPartUriEqualityComparer を明示的に使用し、大文字小文字非感応なキー検索を保証します。
- PartPieceTests.cs: Uri 等価性契約とコンテンツタイプオーバーライドの大文字小文字非感応性を検証する回帰テストを追加します。
パフォーマンスへの影響
影響なし
関連Issue
その他
PR #118574 で導入された ValidatedPartUri のオーバーライドが Uri 等価性契約(非対称性、ハッシュコードの不一致)を破壊していました。Open XML SDK など ValidatedPartUri と System.Uri を混在させるライブラリで不正な辞書/ハッシュセット検索が発生していたため、この修正が必要でした。
#131779 Use released TFM for cDAC projects where supported
- 作成者: @hoyosjs
- 作成日時: 2026年08月03日 23:53:01(UTC)
- マージ日時: 2026年08月07日 03:08:56(UTC)
- ラベル: area-Diagnostics-cdac
概要
cDAC(Compact Diagnostic and Debugging Access)プロジェクト全体のターゲットフレームワーク選択を統一する変更です。新たにCDacTfmプロパティを導入し、デフォルトで$(NetCoreAppMinimum)(リリース版TFM)をターゲットします。source-buildおよびNativeAOTツールチェーンが未対応なプラットフォームでは$(NetCoreAppToolCurrent)にフォールバックします。実行可能な出力に対してはRollForward=LatestMajorを設定し、リポジトリ環境の最新ランタイムで実行可能にします。
変更内容
- Directory.Build.props:
CDacTfmプロパティの定義と条件付きロジック(+15行追加) - cDAC主要プロジェクト群(5個):
TargetFrameworkを$(CDacTfm)に統一- Microsoft.Diagnostics.DataContractReader.Abstractions
- Microsoft.Diagnostics.DataContractReader.Contracts
- Microsoft.Diagnostics.DataContractReader
- Microsoft.Diagnostics.DataContractReader.Legacy
- mscordaccore_universal
- 実行可能/テストプロジェクト群(6個):
TargetFrameworkを$(CDacTfm)に更新し、RollForward=LatestMajorを条件付きで追加- cdac-dump-inspect
- DataGenerator.Tests
- DumpTests
- StressTests
- UnitTests
- テストインフラ:
TargetFrameworkを$(CDacTfm)に統一
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- cDAC スタックはツール類とコードを共有しており、これらのツールはリリース済みSDKでのビルドのみに対応しています。本変更によりリリース版TFMをターゲットすることで、こうした環境での互換性を確保しながらsource-buildおよび未対応プラットフォームのサポートを損なわない設計になっています。
- 内部ビルドプロパティの変更であり、公開API互換性への影響はありません。
#131740 [Release 10.0] Support hardware with more than 1024 CPUs
- 作成者: @janvorli
- 作成日時: 2026年08月03日 13:38:29(UTC)
- マージ日時: 2026年08月07日 19:25:21(UTC)
- ラベル: Servicing-approved area-GC-coreclr
概要
1024個を超えるCPUを搭載するLinuxマシンでの.NETランタイム初期化失敗を解決するバックポート。固定サイズのcpu_set_t(最大1024CPU対応)から動的サイズのCPUセットに切り替え、GCのアフィニティ/ヒープマッピングコードを更新して、CPU制限とヒープ制限の混同を解消します。コンテナ環境で1024個以上のCPUを持つホスト上で制限されている場合も対応。
変更内容
- minipal/cpucount.h/c:
minipal_get_cpu_max_possible_count()ヘルパーを追加し、Linuxのsysfs解析とsysconfフォールバックで最大可能CPU数を取得 - PAL/thread.cpp、sysinfo.cpp: 動的に割り当てられたCPUセットを使用してアフィニティ操作を実装
- NativeAOT/PalUnix.cpp: 動的CPUセットでプロセスCPU数初期化に対応
- GC環境(gcenv.windows.cpp、gcenv.unix.cpp、gcenv.os.h):
g_processAffinitySetを動的に初期化し、AffinitySetを動的サイズ対応に変更 - GC内部API(gcpriv.h、gc.cpp、gcconfig.cpp):
CPUリミット定数をMAX_SUPPORTED_HEAPSに改名し、CPU-indexedマップをヒープベースのサイジングに切り替え
パフォーマンスへの影響
影響なし(アーキテクチャ対応の変更であり、パフォーマンス最適化ではない)
関連Issue
その他
- バックポート元:#126763、#127572
- リスク評価:低(main ブランチに4月初旬から含まれており、問題未報告)
- テスト実績:Azure VM(1792 CPU コア)での実装テスト、CI における coreclr およびライブラリテスト実施
- Copilot指摘事項:
AffinitySet::Add/Removeの境界チェック(assert のみ)、CPU_ALLOCの null チェック、minipal_get_cpu_max_possible_count()の戻り値正規化に関する改善提案あり
#131735 [release/10.0] [mono][AOT] gsharedvt - stop validating generic constraints
- 作成者: @github-actions[bot]
- 作成日時: 2026年08月03日 12:40:51(UTC)
- マージ日時: 2026年08月07日 09:31:45(UTC)
- ラベル: Servicing-approved arch-wasm area-Codegen-AOT-mono linkable-framework
概要
Mono AOT コンパイラのジェネリック共有化(gsharedvt)機能で、ジェネリック制約の検証を停止する変更です。これは issue #121472 を修正するもので、.NET 11 で報告された問題を .NET 10 にバックポートしています。
変更内容
- src/mono/mono/metadata/class-internals.h: クラス内部構造に新しいフィールドを追加(1行追加)
- src/mono/mono/metadata/class-private-definition.h: 新しいプライベート定義を追加(1行追加)
- src/mono/mono/metadata/class-accessors.c: 新しいアクセッサーメソッドを実装(17行追加)
- src/mono/mono/metadata/class-init.c: クラス初期化処理でジェネリック制約検証ロジックを修正(7行追加、5行削除)
- src/mono/mono/mini/mini-generic-sharing.c: ジェネリック共有化処理の制約検証を調整(3行追加、1行削除)
- src/libraries/System.Text.Json/tests/: テストケースとILLink記述子ファイルをメンテナンス
パフォーマンスへの影響
影響なし
関連Issue
その他
- 主な変更は Mono メタデータおよび AOT コンパイラーの内部実装です
- リスク評価: 低(メイン ブランチで 10 ヶ月間の実績あり)
- 自動テストと顧客報告ケースの手動テスト両方で検証済みです
- 破壊的変更なし
#131666 Trim unused CoreCLR native components from dotnet-linker-tests build
- 作成者: @sbomer
- 作成日時: 2026年07月31日 19:03:46(UTC)
- マージ日時: 2026年08月07日 03:11:20(UTC)
- ラベル: area-NativeAOT-coreclr
概要
dotnet-linker-testsパイプラインのRuntime_Releaseジョブが不要なCoreClr nativeコンポーネント(alt-JIT、SuperPMIなど)をビルドしないよう最適化するPR。これに伴い、Windows上でのJITインストール規則を修正し、Unix/Windows間の非対称性を解消。
変更内容
src/coreclr/jit/CMakeLists.txt
- Windows上でも
jitコンポーネントへターゲット特定JIT(例:clrjit_win_x64_x64)のインストール規則を追加 - Unix既存規則と同等の仕組みをWindows側に実装
- 修正前:Windows全nativeビルド時のみこれらJITがインストールされ、個別コンポーネント選択時はcrossgen2が失敗
- 修正後:
jitコンポーネント単独でも必要なJITが完全に揃う
eng/pipelines/runtime-linker-tests.yml
- CoreClrサブセット指定を
clr.native(全nativeコンポーネント)からclr.runtime+clr.nativeaotruntimeに変更 - 削減対象:
alljits(不要なalt-JIT)、spmi(SuperPMI)、clr.packages(nupkgのみ)、clr.crossarchtools(冗長)
パフォーマンスへの影響
改善実績(CI測定)
- Windows-x64(クリティカルパス):ninja対象数 2646→1901(−28.2%)、ビルド時間 40.0m→35.4m(−4.6m)
- Linux-x64:ninja対象数 2837→2132(−24.8%)、ビルド時間 31.7m→29.0m(−2.7m)
- 全体ジョブ時間:62.4m→56.5m(Windows-x64)
- ローカルCoreClr nativeビルド(linux-x64、ninja -j 4):4m03s→3m05s(−24%)
- browser-wasm:影響なし(monoビルド)
関連Issue
#131755(参考:linux-arm64既知Flaky)
その他
- 検証済み:trimming tests(88合格)、NativeAOT test apps(57合格)、必要なアーティファクト(libcoreclr.so、ilc、crossgen2、ilasm/ildasm等)は全て保持
- 全3ジョブ(windows-x64、linux-x64、browser-wasm)のdotnet-linker-testsがCI通過、テストカバレッジ変化なし
- 2件の関連しない失敗報告あり(OpenBSD/TlsSessionFlaky)
#131658 [wasm] Emit webcil payloadSize/tableSize into boot config for streaming instantiation
- 作成者: @pavelsavara
- 作成日時: 2026年07月31日 17:22:03(UTC)
- マージ日時: 2026年08月07日 15:46:49(UTC)
- ラベル: arch-wasm area-Host
概要
WebAssemblyの動的インスタンス化を最適化するため、ビルドパイプラインからブートコンフィグへwecbil形式アセットのペイロードサイズ(全アセット)とテーブルサイズ(ReadyToRun画像のみ)を記録します。これにより、JSローダーはバイトバッファリングやデータセクション解析なしでストリーミングインスタンス化を実行できます。
変更内容
ビルドタスク(C#側)
ConvertDllsToWebCilタスク:生成されたwasmからペイロードサイズ・テーブルサイズを計算し、MSBuildメタデータとして出力AttachWebcilSizesタスク(新規):ディスク上のwecbilファイルから既存サイズを読み取り、インクリメンタルビルド時のメタデータ欠落に対応GenerateWasmBootJson:BootJsonDataに新規WebcilAsset型を追加(payloadSize/tableSizeフィールド、デフォルト値は出力しない)BootJsonBuilderHelper:計算済みサイズをアセット項目にマッピング
ローダー・ホスト(JavaScript側)
instantiateWebcilModule関数:payloadSize/tableSizeを受け取り、WebAssembly.instantiateStreamingを活用してバッファリングなしでインスタンス化- ReadyToRun画像向けにホストABIハンドシェイク(スタックポインタ、例外タグ、間接呼び出しテーブル、イメージベース)をワイヤリング
- 失敗時のペイロードバッファ解放処理を実装
API・型定義
- 公開API(
public-api.ts)にWebcilAsset型を追加 - 内部型(
internal.ts、ems-ambient.ts)を拡張し、ローダーパイプラインを通じてサイズを伝播
パフォーマンスへの影響
ストリーミングインスタンス化により、従来のバイトバッファリングと実行時データセクション解析が不要になるため、メモリ効率とインスタンス化速度が向上します。改善率の具体的なベンチマーク結果は提供されていません。
関連Issue
#129634(このPRの親となるPR)
その他
payloadSizeは全wecbil-in-wasmアセットに出力されます;tableSizeはReadyToRun wecbil-in-wasmイメージが実装される際に出力されます(別途フォローアップ作業予定)net11.0+でのみ出力される機能ですWebcilInWasmSizesTestsによる単体テストでWebcilReader.TryReadWebcilInWasmSizesの動作をカバーしています
#131352 Round-trip TimeZoneInfo.ToSerializedString on Unix (#19794)
- 作成者: @tarekgh
- 作成日時: 2026年07月24日 22:45:40(UTC)
- マージ日時: 2026年08月07日 21:59:48(UTC)
- ラベル: area-System.DateTime
概要
Unix プラットフォームで TimeZoneInfo.ToSerializedString() / FromSerializedString() がラウンドトリップできない問題を修正します。Unix の調整ルールが Windows 形式では表現できない情報を保持している場合(サマータイム遷移なし、UTC 種別の日付境界、分未満のオフセット、複数年にわたる内部ルールなど)、逆シリアライズされたインスタンスが元のオブジェクトと一致していませんでした。
修正では、従来のルール リスト終了後に完全性を保証した内部調整ルールのコピーを追加することで、下位互換性を保ちながら正確なラウンドトリップを実現します。
変更内容
- TimeZoneInfo.StringSerializer.cs: レガシー ルール リスト終了後に、オプショナルなトレーラーを追加する仕様を実装。トレーラーがない場合やバージョンが不明な場合は、レガシー ルールにフォールバック。トレーラーは損失性のあるケースのみ出力され、Windows 形式のタイムゾーンはバイト単位で同一の出力を保証。入力値の妥当性チェック(ルール数制限、オーバーフロー判定など)を追加。
- TimeZoneInfoTests.cs: Unix プラットフォーム向けのラウンドトリップテスト再有効化。Windows 形式ルールではトレーラーが出力されないことの確認、固定・浮動遷移と分未満のオフセットを含む完全性保証のラウンドトリップテスト、マルフォームド/オーバーフロー トレーラーの例外処理テスト、未知バージョンのトレーラー無視テストなどを追加。
パフォーマンスへの影響
影響なし。トレーラーは損失性のある場合のみ出力され、一般的な Windows 形式のタイムゾーンは出力サイズに変化なし。
関連Issue
その他
- 下位互換性を完全に保証:既存シリアライズ文字列と Windows 出力は変更なし。
- セキュリティ対応:信頼できない入力(トレーラーのカウントとルール Ticks)に対する検証を実装し、マルフォームド入力は
SerializationExceptionをスロー。 - Windows (618 テスト) と Linux/WSL (2044 テスト) で全てのテストがパス。
#131342 Remove boxing for awaited custom awaiters
- 作成者: @jakobbotsch
- 作成日時: 2026年07月24日 19:11:15(UTC)
- マージ日時: 2026年08月07日 01:55:58(UTC)
- ラベル: area-CodeGen-coreclr Priority:1 runtime-async
概要
カスタム struct awaiterの呼び出しで発生していたボックス化を排除する最適化です。awaiterを継続オブジェクト内に格納し、JITが計算したオフセットで後に抽出してからUnsafeOnCompletedを呼び出すことで、ボックス化を回避します。新たにGT_CONTINUATION_MEMBER_OFFSETノードを導入し、オフセットが確定するまで象徴的に参照してから定数に置換します。
マイクロベンチマークでは約10%のパフォーマンス改善が確認されています。
// 最適化により、struct awaiterの格納と抽出がボックス化なしで行われます
await new CustomStructAwaiter(value);
変更内容
- AsyncHelpers.cs: 継続内の awaiter をオフセット指定で待機する新しいヘルパーメソッド追加
- async.cpp/async.h:
GT_CONTINUATION_MEMBER_OFFSETノードを使用した継続レイアウト管理と、awaiter の継続内への格納・抽出ロジック実装 - importercalls.cpp: struct awaiter の呼び出しを新しいヘルパーに書き換え、継続メンバーオフセットを記録
- JIT↔EE インターフェース: 新しいヘルパーメソッド解決用の仮想メソッド追加(
ICorStaticInfo::getAwaitAwaiterInContinuationCall) - jitinterface.h/cpp: ヘルパー解決ロジック実装
- SuperPMI: 新しいクエリのプラミング(shim/collector/recorder)
- ILC/ReadyToRun: トークン解決対応
- テスト:
custom-struct-awaiters.csで safe/unsafe struct awaiter の回帰テスト追加 - jitconfigvalues.h: 継続再利用の設定可能化を削除(無条件有効化)
パフォーマンスへの影響
マイクロベンチマーク結果:
- 約10%改善 (323ms → 290ms)
- ボックス化の排除により、struct awaiter を使用した大量の
await呼び出しで顕著な改善 - メモリ効率向上(GC圧力低減)
関連Issue
その他
- 内部実装変更: JIT コンパイラの async 変換パイプラインのみに影響、パブリック API に変更なし
- 継続再利用: 従来は設定可能だった
GT_CONTINUATION_MEMBER_OFFSET展開の単純化のため、継続再利用を無条件で有効化 - 新しい well-known arg:
AsyncAwaiterという新しいの pseudo arg を導入し、async 変換で継続オブジェクトのオフセットに配置
#131177 Remove queue-subdispatching pattern to the ThreadPool global queue
- 作成者: @VSadov
- 作成日時: 2026年07月22日 00:57:54(UTC)
- マージ日時: 2026年08月07日 19:09:10(UTC)
- ラベル: area-System.Net.Sockets area-System.Threading
概要
Socket/IO完了イベントのThreadPool派遣パターンを変更します。従来の「キュー+ポンピングワークアイテム」パターンを廃止し、プール化されたワークアイテムをバランス二分木で束ねてバッチ送信する方式に置き換えます。これにより、グローバルキューへの負荷軽減、メモリ境界設定、p99レイテンシの大幅な改善を実現します。
変更内容
- ThreadPoolWorkQueue.cs: Windows専用の
ThreadPoolTypedWorkItemQueueサブディスパッチャー実装を削除 - PortableThreadPool.IO.Windows.cs: IOCP完了用に
Eventワークアイテムをプール化し、バランス二分木でバッチ送信。ノード実行時に子をローカルキューに配置 - SocketAsyncEngine.Unix.cs:
SocketIOEventインスタンスをプール化し、非同期ソケットイベントを同様にバランス二分木でバッチ送信。ローカル優先スケジューリングを調整 - SocketAsyncContext.Unix.cs: 非同期操作処理/キャンセルコールバックの一部を
preferLocal: trueでキューイング - PortableThreadPool.HillClimbing.cs: HillClimbingロジックの軽微な調整
- SafeSocketHandle.Unix.cs: Unix固有の調整
パフォーマンスへの影響
改善: JSON ベンチマーク(56コア)
- RPS: +2.1%(2,528,080 → 2,580,722)
- p99レイテンシ: -17.4%(3.79ms → 3.13ms)
改善: JSON ベンチマーク(96コア/低負荷)
- RPS: +4.1%(2,064,045 → 2,149,487)
- p99レイテンシ: -43.6%(0.78ms → 0.44ms)
改善: JSON ベンチマーク(96コア/高負荷)
- p99レイテンシ: -4.0%(7.30ms → 7.01ms)
高コア数構成でのp99レイテンシ改善が特に顕著。.NET 10との性能差をほぼ解消。
関連Issue
その他
実装上の懸念点: Copilot によるコードレビューで、ConcurrentQueue<T>.Countをホットパス(毎回のIO完了/イベント実行)で呼び出すことが指摘されています。Count操作は競合下で高コストになる可能性があるため、Interlocked ベースのカウンタに置き換えることが推奨されています。
互換性: 内部実装の変更であり、公開APIへの破壊的変更はなし。
#118075 Add Compliance tests for GB18030-2022
概要
GB18030-2022(中国の文字セット標準)に対する包括的なコンプライアンステストスイートを追加します。テストデータファイルとともに、文字列、ファイル、ディレクトリ、エンコーディング、正規表現、コンソール出力などの多様な領域でGB18030エンコーディングの正確性を検証するテストを実装します。
変更内容
- テストフレームワーク:
src/libraries/Common/tests/ComplianceTests/GB18030/TestHelper.csにテストヘルパークラスを追加(エンコーディング、テストデータ管理、テキスト要素分割ロジック) - テストデータ:
Level3+Amendment_Test_Data_for_Mid_to_High_Volume_cases.txtにGB18030準拠テストデータを追加 - 個別テストクラス:
CharTests.cs: 文字単位のテストStringTests.cs: 文字列操作テスト(Contains、Indexof等)FileTests.cs/FileInfoTests.cs: ファイル操作(読み書き、列挙)DirectoryTests.cs/DirectoryInfoTests.cs: ディレクトリ操作EncodingTests.cs: エンコーディング変換RegexTests.cs: 正規表現マッチングConsoleTests.cs: コンソール出力CharUnicodeInfoTests.cs: Unicode情報API
- プロジェクト設定:
Compliance.Tests.csprojとCommon.Tests.slnxを更新 - 既存コード修正:
CharUnicodeInfoTestData.csとRegexGeneratorHelper.netcoreapp.csの例外処理を改善
パフォーマンスへの影響
影響なし(テストコードの追加のため、ランタイムパフォーマンスに直接影響なし)
関連Issue
なし
その他
注記: Copilotによる複数のレビュー指摘から、いくつかの潜在的な問題が指摘されています:
- パス分割ロジック(
NonExceedingPathNameMaxDecodedTestData)で、最大バイト数制限を超過したセグメントが生成される可能性 - 改行文字の扱い:テストデータはLF形式のみだが、Windowsではシステム改行(CRLF)との不一致で失敗する可能性
- ファイル列挙テストの順序不定性(プラットフォーム依存)
- 文字列連結ループによる性能低下の懸念
これらは将来の修正の対象となる可能性があります。