Pull Request on 2026年07月05日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。



#130221 Align keepnativesymbols option with src/tests/build

概要

ビルドスクリプト間の--keepnativesymbolsオプションの動作を統一するPR。 従来、./build.shではこのオプションが値を必須とする引数形式(--keepnativesymbols true)でしたが、src/tests/build.shではスイッチ形式(値なし)で実装されていました。 本変更により、両スクリプトで統一してスイッチ形式(値なし)に変更されています。

変更内容

  • eng/build.sh: --keepnativesymbolsオプションの実装をスイッチ形式に変更(値を不要にする)
  • docs/workflow/building/coreclr/android.md: ドキュメントを更新して新しいスイッチ形式を反映

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

この変更はビルドスクリプトのインターフェース統一であり、ユーザーがビルドコマンドを実行する際の使用方法に影響します。既存のスクリプト呼び出しで--keepnativesymbols trueという形式を使用していた場合は、更新後は--keepnativesymbolsのみとなるため、自動化されたビルドスクリプトの更新が必要となる可能性があります。


#130213 Publish GCHandle assignments with release semantics

概要

GCハンドル割り当て時にリリースセマンティクスを使用して、弱順序のARM64システムにおけるメモリ可視性の問題を修正します。従来のプレーンストア(*handle = value)では、オブジェクト初期化前の書き込みが他スレッドに可視化される前に、そのハンドルを通じてオブジェクト参照が公開される可能性がありました。

修正内容:HndAssignHandleとHndAssignHandleGCでプレーンストアをVolatileStoreに変更し、ハンドル割り当てをリリース公開ポイントとします。

// 修正前
*(_UNCHECKED_OBJECTREF *)handle = value;

// 修正後
VolatileStore((_UNCHECKED_OBJECTREF *)handle, value);

変更内容

  • src/coreclr/gc/handletable.inl: HndAssignHandleとHndAssignHandleGC内のGCハンドルスロットへの割り当てをプレーンストアからVolatileStoreに変更。メモリフェンスを挿入し、先行する書き込みがハンドルを通じたオブジェクト観測前に可視化されることを保証。

パフォーマンスへの影響

メモリ順序制約の厳格化により、ARM64システムにおいて若干のパフォーマンス影響がある可能性があります。ただし、本PR内に具体的なベンチマーク結果の記載はありません。

関連Issue

#130213

その他

  • 検出背景: ARM64実行時(10.0.9)のRegex.Replace実装で稀なNullReferenceExceptionが発生。WeakReferenceが部分初期化されたRegexReplacementオブジェクトを観測していることが原因。
  • 検証: WeakReference公開再現テストで検証。パッチなしではMacおよびAWS ARM64で即座に失敗、x64では失敗なし。パッチ適用後は両環境で失敗なし。
  • 影響範囲: ランタイムGCハンドル層の内部実装。公開APIへの直接的な変更なし。

#125379 Optimize string.Split(char, ...)

概要

string.Split(char, ...) のパフォーマンスを最適化するPRです。単一文字セパレータ(最も一般的なケース)を対象とした特化した高速パスを追加し、ベクトル化実装によるセパレータ位置スキャンを導入しました。

変更内容

  • String.Manipulation.cs: MakeSeparatorListAny に単一セパレータ(separators.Length == 1)専用の高速パスを追加。新たに MakeSeparatorListVectorized(..., char c) オーバーロードを導入してセパレータスキャンをベクトル化。2~3セパレータパスは separators.Length >= 2 を前提に調整。
  • SpanHelpers.Packed.cs: PackSources ヘルパーを内部アクセスに変更し、複数の呼び出し元をサポート。
  • String.SplitTests.cs: 新しい最適化パスに対するテストケースを追加(56行追加)。

パフォーマンスへの影響

単一文字セパレータで、セパレータがまれ/なしのケースが主な改善対象:

  • x64 (AMD): 約47%改善
  • ARM: 約20%改善
  • 単一文字のオーバーロードが文字列セパレータオーバーロードを上回るパフォーマンスを実現
  • その他のケース(複数セパレータなど)は誤差範囲内での変化

.NET 12ではさらに約15%の改善余地が存在。

関連Issue

#125379

その他

  • Copilotレビューで、Vector512<byte> PackSources ヘルパーのコメントが Vector256<short> を参照している点が指摘されており、メンテナンス性の観点から修正が推奨されています。
  • PackSources ヘルパー使用時の制約条件(ISAサポート確認、CanUsePackedIndexOf 検証)のドキュメント化も提案されています。

目次