Pull Request on 2026年02月01日

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

注意点

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



#123854 Use [] instead of Array.Empty in corelib

  • 作成者: @stephentoub
  • 作成日時: 2026年02月01日 12:51:20(UTC)
  • マージ日時: 2026年02月01日 22:11:38(UTC)
  • ラベル: area-Meta

概要

このPRは、System.Private.CoreLibコードベース内の150以上のArray.Empty<T>()呼び出しを、モダンなC# collection expression構文[]に置き換えるコード改善です。ランタイムの動作は完全に同一で、両方式とも共有されたキャッシュ済みの空配列シングルトンを返すため、実質的な機能変更はありません。

変更内容

  • Reflection API関連: RuntimeCustomAttributeData.cs、RuntimeEventInfo.cs、RuntimeModule.cs、RuntimeParameterInfo.csなど複数ファイルでArray.Empty()を[]に置換
  • Reflection.Emit: CustomAttributeBuilder.cs、DynamicILGenerator.csで6+項目を置換
  • Collections: ArrayList.cs、Queue.cs、ConcurrentDictionary.cs、ReadOnlySet.csなどで10+項目を置換
  • Text/Globalization: Encoding、CultureData、CompareInfoなど複数ファイルで10+項目を置換
  • その他: Buffers、Diagnostics、AppDomain、IO関連で30+項目を置換
  • 合計66ファイル、150以上のインスタンスを変更

パフォーマンスへの影響

影響なし[]Array.Empty<T>()は同一のランタイムセマンティクスを持ちます。両方式共にキャッシュされた空配列シングルトンを返すため、メモリ割り当てや実行速度に違いはありません。これはコンパイラレベルでの最適化により等価な中間言語コード(IL)が生成されます。

関連Issue

なし

その他

  • この変更はコード品質向上を目的とした改善で、C# 12で導入されたcollection expressionsへの準拠を進めるものです
  • System.Reflection.Metadata/AssemblyNameInfo.csでは、Array.Empty変更に加えてプリプロセッサディレクティブのフォーマット変更も含まれていますが、これは主目的と無関係です
  • 互換性への影響:APIレベルの変更がないため、既存コードとの互換性は完全に保たれます

#123852 Remove unused ToUpperInvariantMode methods

  • 作成者: @Copilot
  • 作成日時: 2026年02月01日 11:43:48(UTC)
  • マージ日時: 2026年02月01日 22:10:22(UTC)
  • ラベル: 指定なし

概要

OrdinalCasing.Icu.cs内の未使用メソッドToUpperInvariantModeを削除するクリーンアップPRです。charオーバーロードとReadOnlySpan<char>拡張メソッドの2つのオーバーロードが削除されます。コードベース全体で呼び出し元が存在しないことを確認済みで、同様の機能はToUpperOrdinalメソッドで提供されています。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Globalization/OrdinalCasing.Icu.cs
    • internal static char ToUpperInvariantMode(char c) メソッドを削除
    • public static void ToUpperInvariantMode(this ReadOnlySpan<char> source, Span<char> destination) 拡張メソッドを削除
    • 削除行数:11行

パフォーマンスへの影響

影響なし。削除されるメソッドは呼び出し元が存在しないため、パフォーマンスへの変更はありません。むしろコード保守性が向上します。

関連Issue

なし

その他

  • 削除前にコードベース全体の検索により、これらのメソッドへの参照が存在しないことを確認済み
  • ビルドは成功
  • 同等の機能はToUpperOrdinalメソッドで提供されているため、既存の機能に影響なし
  • Copilotの提案に基づいた定期的なコード整理PR

#123850 Fix incorrect Vector256->Vector512 in SpanHelpers

  • 作成者: @stephentoub
  • 作成日時: 2026年02月01日 05:02:58(UTC)
  • マージ日時: 2026年02月01日 19:09:40(UTC)
  • ラベル: area-System.Memory

概要

SpanHelpers.T.csNonPackedIndexOfAnyInRangeUnsignedNumberメソッドにおいて、Vector512高速パスでのポインタインクリメントが誤ってVector256のカウント値を使用していた問題を修正しました。これにより、Vector512使用時の不要な重複処理が排除され、パフォーマンスが改善されます。

// 修正前:Vector512ループでVector256のカウント分だけ進む(重複処理が発生)
offset += Vector256<T>.Count;

// 修正後:Vector512ループでVector512のカウント分だけ進む(正しい処理)
offset += Vector512<T>.Count;

変更内容

  • ファイル: src/libraries/System.Private.CoreLib/src/System/SpanHelpers.T.cs
  • 変更: Vector512ループのポインタインクリメントをVector256.CountからVector512.Countに修正(+1/-1行)

パフォーマンスへの影響

改善あり - Vector512対応CPU環境での処理効率が向上

  • 修正前:Vector512ループで1回の反復につきVector256のサイズ分だけ進むため、次の反復で大きな重複領域が生じていた
  • 修正後:Vector512ループで1回の反復につきVector512のサイズ分だけ進むため、重複処理が排除される
  • このバグはパフォーマンス問題として顕在化(正確性への影響はなし)

関連Issue

なし

その他

  • Vector512をサポートするAVX-512搭載プロセッサを使用している環境で特に効果的
  • 低レベルなSpanヘルパー実装の修正であり、標準ライブラリの範囲検索パフォーマンス全般に波及する可能性あり

#123842 Remove no-op string.Format calls with single message argument

  • 作成者: @Copilot
  • 作成日時: 2026年01月31日 14:13:14(UTC)
  • マージ日時: 2026年02月01日 05:33:43(UTC)
  • ラベル: 指定なし

概要

このPRは、フォーマット引数を持たない string.Format("message") の呼び出し239件を削除し、文字列リテラルに直します。テストコードとGCLogParserツール内の不要なメソッド呼び出しを除去する、コード品質改善PRです。

// 変更前
Assert.Fail(string.Format("Expected exception was not thrown"));

// 変更後
Assert.Fail("Expected exception was not thrown");

変更内容

  • 対象ファイル数: 18ファイル、239個の置換
  • 影響範囲: テストコード(System.Runtime、System.Threading.Tasks.Parallel、System.Reflection.MetadataLoadContext)とGCLogParserツール
  • 主な変更:
    • System.Runtime テスト: 173件(特にTaskRtTests_Core.csで137件)
    • System.Threading.Tasks.Parallel テスト: 2件
    • System.Reflection.MetadataLoadContext テスト: 2件
    • GCLogParser: 2件

すべての変更は 本番コードに影響なし で、テストコードとツール内の不要なラッパーのみ対象

パフォーマンスへの影響

改善あり - 軽微だが実質的:

  • 不要な string.Format() メソッド呼び出しを239件削除
  • 文字列フォーマット処理のオーバーヘッド排除(リフレクション不要)
  • テスト実行時間の短縮(累積効果は顕著)
  • メモリアロケーション削減

テストコード対象のため全体的なランタイム性能への影響は限定的ですが、テストの高速化に貢献

関連Issue

#123834(類似のSR.Format呼び出し削除)

その他

  • Copilotによる自動コード生成PRで、18ファイル全てレビュー済み
  • 指摘・コメントなし(品質良好)
  • すべての削除対象文字列でフォーマットプレースホルダーなしを検証済み
  • 破壊的変更なし

#123840 SPMI: Update superpmi-diffs queue to OSX.15.Arm64.Open

  • 作成者: @jakobbotsch
  • 作成日時: 2026年01月31日 13:54:56(UTC)
  • マージ日時: 2026年02月01日 11:51:16(UTC)
  • ラベル: area-CodeGen-coreclr

概要

SPMI(SuperPMI)の差分検証キューを OSX.14.Arm64.Open から OSX.15.Arm64.Open に更新するPRです。新しいキューはより高い処理容量を提供します。

変更内容

  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: Helix キューの設定を更新(1行追加、1行削除)
    • superpmi-diffs キューの対象マシンを OSX.14 から OSX.15 へ変更

パフォーマンスへの影響

新しいキューの容量向上により、SPMI 差分検証のスループットが改善される可能性があります。OSX.15.Arm64 マシンプールの容量が OSX.14 より大きいため、テスト実行の並列度向上やジョブ待機時間の削減が期待できます。

関連Issue

なし

その他

  • これは CI/CD パイプライン設定の変更であり、ランタイムコード自体への影響はありません
  • CoreCLR の JIT コンパイラテストインフラの改善に関連しています

#123838 Look through async thunks in RuntimeHelpers.PrepareMethod

  • 作成者: @jakobbotsch
  • 作成日時: 2026年01月31日 13:36:27(UTC)
  • マージ日時: 2026年02月01日 03:46:06(UTC)
  • ラベル: needs-area-label

概要

RuntimeHelpers.PrepareMethodにおいて、非同期メソッドのthunkを透過的に処理するようになりました。Reflectionで公開される非同期メソッドは通常Task返却型のthunkですが、実際のユーザーILを持つメソッドをJITコンパイルするよう改善されています。

変更内容

  • src/coreclr/vm/reflectioninvocation.cpp (+10/-3)
    • RuntimeHelpers.PrepareMethod内でasyncメソッドのthunkを通して、元のメソッドを取得する処理を追加
    • Reflectionが公開するTask返却型のthunk越しに、実際のユーザーILを持つメソッドをJITコンパイル対象とするロジック実装

パフォーマンスへの影響

直接的なパフォーマンス改善の報告はありませんが、この変更により:

  • async/awaitメソッドに対するPrepareMethod呼び出しが正しく機能するようになり、JITコンパイルの効率が向上する可能性あり
  • 不要なthunk層を通さず実メソッドをコンパイルすることで、最適化の精度が向上する可能性あり

関連Issue

なし

その他

  • 変更は最小限(+10/-3)で、既存のReflection関連ロジックに対する修正
  • RuntimeHelpers.PrepareMethodは通常、JIT事前コンパイルやパフォーマンス最適化目的で使用される低レベルAPI
  • async/await由来のthunkメソッドを透過的に処理することで、APIの振る舞いがより直感的になります

#123835 Remove extra array allocations from TarHeader.GetLongMetadataStream

  • 作成者: @stephentoub
  • 作成日時: 2026年01月31日 12:11:59(UTC)
  • マージ日時: 2026年02月01日 04:00:26(UTC)
  • ラベル: area-System.Formats.Tar

概要

TAR ライブラリの GetLongMetadataStream メソッドを最適化し、GNU フォーマットの TAR エントリ向けの長いメタデータストリーム生成時の不要な配列割り当てを削減しました。中間的なバッファ割り当てを排除し、単一のバイト配列に直接 UTF-8 バイトを書き込むように改善されています。

変更内容

  • src/libraries/System.Formats.Tar/src/System/Formats/Tar/TarHeader.Write.cs
    • GetLongMetadataStream メソッドの実装を改善
    • MemoryStream.Write()Encoding.UTF8.GetBytes() による中間的な配列割り当てを削減
    • 単一のバイト配列割り当てに統一し、UTF-8 バイト列を直接書き込む方式に変更

パフォーマンスへの影響

改善点:

  • 不要な配列割り当てを削減することで GC 圧力を軽減
  • メモリ使用量の削減
  • 特に大量の長いメタデータを扱う TAR 操作でメモリ効率が向上

関連Issue

なし

その他

  • 変更規模が小さく(+3/-5 行)、局所的な最適化
  • TAR ライブラリの内部実装の改善であり、公開 API への影響なし
  • 既存の動作に変更はなく、互換性への影響なし

#123834 Remove no-op SR.Format calls with single message argument

  • 作成者: @Copilot
  • 作成日時: 2026年01月31日 12:05:45(UTC)
  • マージ日時: 2026年02月01日 03:01:08(UTC)
  • ラベル: area-Meta

概要

このPRは、フォーマット引数のないSR.Format(SR.SomeMessage)の呼び出しを削除し、直接SR.SomeMessageに置き換える機械的なリファクタリングです。67個の無操作(no-op)なSR.Format呼び出しを6つのライブラリにまたがって削除し、コードの明確性を向上させます。また、ComplexTypeRestrictionNotSupportedで検出された未使用の{0}プレースホルダーのバグを修正しました。

// 変更前
throw new InvalidOperationException(SR.Format(SR.SomeErrorMessage));

// 変更後
throw new InvalidOperationException(SR.SomeErrorMessage);

変更内容

  • System.Data.OleDb - OleDb_Util.cs: 16個のno-op呼び出しを削除
  • System.Security.Cryptography.Cose - CoseHeaderValue.cs: 4個のno-op呼び出しを削除
  • System.Private.CoreLib - GC.CoreCLR.cs, GC.NativeAot.cs: 各2個ずつ削除
  • System.Private.DataContractSerialization - SchemaImporter.cs(32個), DataContractSet.cs(2個), ExtensionDataReader.cs(1個)、Strings.resxでバグ修正
  • System.Text.Json - ThrowHelper.cs(4個), ThrowHelper.Serialization.cs(3個)
  • System.Formats.Tar - TarHeader.Read.cs(2個), TarHelpers.cs(1個), テストコード(1個)

パフォーマンスへの影響

改善: 不要な関数呼び出し(SR.Format)が67箇所削除されるため、わずかながらランタイムオーバーヘッドが軽減されます。特にエラーパスで複数回呼ばれる可能性のある例外ハンドラーでは、無駄な呼び出し数が削除されることで微小な性能向上が期待できます。ただし例外スロー時は呼ばれるため、実質的な性能差は最小限です。

関連Issue

なし

その他

  • すべての変更は機械的なリファクタリングで、既存の動作を完全に保持します
  • ComplexTypeRestrictionNotSupportedリソース文字列から未使用の{0}プレースホルダーを削除し、到達時にFormatExceptionをスローしていた潜在的なバグを修正しました
  • 変更はコンパイル時に検証され、リソース文字列にフォーマットプレースホルダーが存在しないことが確認されています

#121104 Optimize logic in SliceLongerSpanToMatchShorterLength

  • 作成者: @xtqqczze
  • 作成日時: 2025年10月27日 03:35:22(UTC)
  • マージ日時: 2026年02月01日 20:05:40(UTC)
  • ラベル: area-System.Memory community-contribution

概要

MemoryExtensions.csSliceLongerSpanToMatchShorterLengthメソッドにおいて、境界チェック(bounds checks)のロジックを最適化しました。これにより、不要なチェック処理を削除し、コード効率を改善しています。

変更内容

  • ファイル: src/libraries/System.Private.CoreLib/src/System/MemoryExtensions.cs
    • 行数: 削除5行、追加2行(差分: +2/-5)
    • 主な変更: SliceLongerSpanToMatchShorterLengthメソッドの境界チェック処理を最適化

パフォーマンスへの影響

改善あり: 不要な境界チェック処理の削除により、メソッド呼び出しのオーバーヘッドが軽減されます。特にこのメソッドが頻繁に呼び出されるシナリオで、わずかながら実行速度の向上が期待できます。

関連Issue

なし

その他

  • このメソッドはSystem名前空間の基盤クラスライブラリ(CoreLib)に属する部分のため、.NET全体に対して広範な影響を持つ可能性があります
  • 変更箇所が限定的(7行)でありながら最適化を実現しており、アーキテクチャ内の効率性を高める施策と考えられます

目次