Pull Request on 2026年03月22日

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

注意点

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



#125920 Add null check ImmutableArray<T>.Builder.RemoveAll

  • 作成者: @prozolic
  • 作成日時: 2026年03月22日 07:23:32(UTC)
  • マージ日時: 2026年03月22日 11:21:22(UTC)
  • ラベル: area-System.Collections community-contribution

概要

ImmutableArray<T>.Builder.RemoveAll(Predicate<T>) メソッドに null パラメータのチェックが欠落していた問題を修正しました。null値を渡した際に NullReferenceException または例外が発生しないという不具合を、正しく ArgumentNullException をスローするよう改善しました。

変更内容

  • ImmutableArray_1.Builder.cs: RemoveAll メソッドの match パラメータに Requires.NotNull による null チェックを追加(+2行)
  • ImmutableArrayBuilderTest.cs: null 値を渡された際に ArgumentNullException がスローされることを検証するテストケースを追加(+2行)

パフォーマンスへの影響

影響なし

関連Issue

#125921

その他

本変更はパブリックAPIの動作を修正するもので、正しい例外処理によりAPI仕様への準拠を向上させます。


#125893 Improve HashSet<T> performance by enabling JIT bounds check elimination

  • 作成者: @danmoseley
  • 作成日時: 2026年03月21日 20:42:47(UTC)
  • マージ日時: 2026年03月22日 02:22:37(UTC)
  • ラベル: area-System.Collections

概要

HashSet<T>のハッシュチェーン走査ループの終了条件をwhile (i >= 0)からwhile ((uint)i < (uint)entries.Length)に変更し、Dictionary<TKey,TValue>で既に採用されているパターンに統一することで、JITの境界チェック最適化を有効化し、パフォーマンスを向上させる変更です。

変更内容

src/libraries/System.Private.CoreLib/src/System/Collections/Generic/HashSet.cs内で以下7つのループ条件を変更:

  • FindItemIndex — 2ループ(値型・カスタム比較子ブランチ)
  • AddIfNotPresent — 2ループ(値型・カスタム比較子ブランチ)
  • Remove — 1ループ
  • AlternateEqualityComparer.Add — 1ループ
  • AlternateEqualityComparer.Remove — 1ループ

符号なし比較により、JITがentries[i]アクセス時の境界チェックを冗長として排除でき、コード生成量が削減(例:FindItemIndexで385→379バイト)されます。

パフォーマンスへの影響

改善あり(値型+デフォルト比較子):

  • FindItemIndex(値型ブランチ): 10%高速化(ContainsTrue: 0.90倍)
  • FindItemIndex(カスタム比較子): 2倍高速化(ContainsTrueComparer: 0.50倍)
  • Remove: 4~6%高速化(0.94~0.98倍、サイズ4096)

中立的:

  • 参照型(string): 1.00倍(ハッシュ・等値比較がボトルネック)
  • Miss経路: 1.00倍(チェーンが短い)
  • Add経路: 1.00倍(メモリ割り当てがボトルネック)

改善はEqualityComparer.Defaultが逆仮想化・インライン化されるシナリオに集中し、回帰なし。

関連Issue

なし

その他

  • 変更は内部実装(System.Private.CoreLibのプライベートメソッド)のため、公開APIに影響なし
  • AlternateEqualityComparer.FindValueは既に符号なしパターンを使用していたため、この変更で同クラス内の一貫性が向上
  • 機能上の変動なし(チェーン走査のセマンティクスは不変)

#125887 Fix multithreaded browser-wasm build: CS0102 errors in PortableThreadPool; remove redundant ThreadPoolBoundHandle.Browser.Threads.cs; regenerate WASM call helpers

  • 作成者: @Copilot
  • 作成日時: 2026年03月21日 13:48:47(UTC)
  • マージ日時: 2026年03月22日 07:11:08(UTC)
  • ラベル: area-System.Threading

概要

WebAssembly(WASM)マルチスレッドビルドのCS0102エラー(重複する型/メンバー定義)を修正するPRです。ThreadPoolBoundHandle.Browser.Threads.csの冗長なファイルを削除し、WASM呼び出しヘルパーを再生成して、ビルドエラーを解決します。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Threading/ThreadPoolBoundHandle.Browser.Threads.cs: 冗長なファイルを削除(15行削除)
  • src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems: プロジェクト設定から削除したファイルの参照を削除(1行追加、2行削除)
  • WASM呼び出しヘルパー関連ファイル:
    • callhelpers-interp-to-managed.cpp: 11行追加、4行削除
    • callhelpers-pinvoke.cpp: 9行追加、1行削除
    • callhelpers-reverse.cpp: 34行追加(新規生成内容)

パフォーマンスへの影響

影響なし

関連Issue

#125507に関連するビルド問題の修正

その他

このPRはPR #125507で導入されたビルド破損を修正するためのフォローアップです。WebAssembly対応のブラウザビルド時のコンパイルエラーを解決します。


#125869 JIT: Null out exceptions in reused continuations and reenable continuation reuse

  • 作成者: @jakobbotsch
  • 作成日時: 2026年03月20日 21:53:00(UTC)
  • マージ日時: 2026年03月22日 01:23:00(UTC)
  • ラベル: area-CodeGen-coreclr runtime-async

概要

非同期継続の再利用時に古い例外が再スローされるバグを修正しました。継続インスタンスが再利用される際に、保持された例外フィールドをnullに初期化することで、将来の再開時に同じ例外が誤って再スローされることを防ぎます。

変更内容

  • src/coreclr/jit/async.cpp: 継続再利用時に再開処理で例外フィールドをクリアする処理を追加。デバッグ用のメソッドハッシュ範囲ゲートを導入。
  • src/coreclr/jit/jitconfigvalues.h: 継続再利用用の範囲設定を追加し、デフォルトの再利用設定を変更。
  • src/tests/async/regression/125805.cs: 例外発生後に例外なしで再開するシナリオをカバーする回帰テストを追加。
  • src/tests/async/regression/125805.csproj: 新しいILテストプロジェクトを追加。

パフォーマンスへの影響

影響なし

関連Issue

#125805 #125806

その他

継続再利用機能の再有効化に伴う修正です。例外オブジェクトの有無で例外の再スローを判定する仕組みに対応し、再利用時に例外状態を確実にリセットすることで、複数のawaitにまたがる継続の不正な例外処理を防ぎます。


#125823 Bump flatted from 3.3.3 to 3.4.2 in /src/native

  • 作成者: @dependabot[bot]
  • 作成日時: 2026年03月20日 09:28:26(UTC)
  • マージ日時: 2026年03月22日 01:56:19(UTC)
  • ラベル: area-DependencyModel javascript dependencies

概要

/src/nativeディレクトリの依存関係として使用されているnpmパッケージflattedをバージョン3.3.3から3.4.2にアップグレードします。このアップグレードではセキュリティ脆弱性(CWE-1321)の修正が含まれています。

変更内容

  • src/native/package-lock.json: flatted依存関係を3.3.3から3.4.2に更新(+3/-3行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはDependabotにより自動生成されたセキュリティアップデートです
  • アップグレードに含まれる主な変更:
    • セキュリティ修正: CWE-1321脆弱性の修正(コミット885ddcc)
    • 再帰問題の修正
    • ベンチマーク改善
  • Dependabot互換性スコア: 確認推奨
  • レビュワー(danmoseley)により承認済み

#125762 [main] Source code updates from dotnet/dotnet

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年03月19日 02:05:13(UTC)
  • マージ日時: 2026年03月22日 21:43:53(UTC)
  • ラベル: area-codeflow

概要

dotnet/dotnetリポジトリからのコードフロー更新PRです。Maestroによる自動同期で、複数の依存パッケージの更新と、テストおよびビルドツール関連のファイル修正が含まれています。ソースコードの主要な機能変更ではなく、メタデータ、テスト構成、ビルド設定の更新が中心です。

変更内容

  • 依存パッケージ更新

    • Microsoft.CodeAnalysis関連(5.6.0-2.26166.111 → 5.6.0-2.26171.106)
    • Microsoft.DotNet.Arcadeおよびビルドツール(11.0.0-beta.26166.111 → 11.0.0-beta.26171.106)
    • NuGetツール(7.6.0-rc.16711 → 7.6.0-rc.17206)
    • System.Reflection.Metadata、System.Text.Json等のランタイム関連パッケージ
  • ビルド・ツール関連

    • eng/Version.Details.props、eng/Version.Details.xmlの依存関係更新
    • eng/common/core-templates/job/renovate.ymlの大幅更新(Renovate設定拡張)
    • eng/common/renovate.env、tools.sh、tools.ps1の追加・更新
  • テストファイル更新

    • System.Collections.NonGeneric、System.Drawing.Primitives等のテストファイルにおける軽微な修正
    • XmlSerializerTests、DataContractSerializerテスト等の行数調整(フォーマット変更の可能性)
  • global.json更新:SDK/ツールチェーンバージョンの更新

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

  • このPRはCodeflow PR形式で、dotnet/dotnetリポジトリからの自動同期です
  • 複数のソースリポジトリからの変更が集約されています(dotnet/arcade、dotnet/aspnetcore、dotnet/efcore、dotnet/roslyn等)
  • テストファイルの変更の多くはフォーマット調整または行番号の更新と思われます
  • 公開API変更は含まれていません

#125697 Convert remaining PREPARE_NONVIRTUAL_CALLSITE call sites to UnmanagedCallersOnly

  • 作成者: @Copilot
  • 作成日時: 2026年03月17日 23:37:36(UTC)
  • マージ日時: 2026年03月22日 20:47:20(UTC)
  • ラベル: area-VM-coreclr

概要

PREPARE_NONVIRTUAL_CALLSITE + CALL_MANAGED_METHOD* パターンを [UnmanagedCallersOnly] / UnmanagedCallersOnlyCaller パターンに変換し、ネイティブ→マネージドの呼び出しを簡潔化します。約23のコアライブラリメソッドのシグネチャを更新し、GCモードのセレモニーを削減し、呼び出しサイトの明確性を向上させます。

変更内容

インフラストラクチャ更新(vm/corelib.h、vm/metasig.h)

  • 約23メソッドのシグネチャをUCO互換形式(ポインタパラメータ + 末尾Exception*)に更新
  • BSTRMarshaler:IL発行用の元のエントリを保持し、ネイティブ呼び出しサイト用に_UCOサフィックス版を追加
  • メタシグ型エンコーディング修正:StartAssemblyLoadStopAssemblyLoadCallICustomQueryInterfaceGuid*パラメータの型をP(C(GUID))P(g(GUID))に修正(System.Guidは値型)
  • ResolveUnmanagedDll等:メタシグの最初のパラメータをPtrStrPtrCharに変更し、戻り値をアウトポインタではなく直接返すように更新

C#側:[UnmanagedCallersOnly]ラッパー追加

  • AssemblyLoadContext.CoreCLR.cs:初期化・アセンブリロード・DLL解決関連メソッド
  • Environment.CoreCLR.cs:コマンドライン引数初期化、リソース文字列取得
  • Thread.CoreCLR.cs:スレッド終了コールバック(OnThreadExitingOnThreadExitedに改名)
  • AssemblyName.CoreCLR.csCreateAssemblyName(インライン化)
  • __ComObject.csComWrappers.CoreCLR.csDynamicInterfaceCastableHelpers.csほか多数のInterop/マーシャリング関連クラス
  • StubHelpers.csBSTRMarshalerConvertToManaged/ConvertToNative(常にnullのネイティブバッファパラメータを削除)

C++呼び出しサイト変換

  • activitytracker.cppdefaultassemblybinder.cppnativelibrary.cppolevariant.cppinteroplibinterface_comwrappers.cpp他16ファイルでUnmanagedCallersOnlyCaller.InvokeThrowing*パターンに変換

WASM callhelpers再生成

  • callhelpers-reverse.cppcallhelpers-pinvoke.cppcallhelpers-interp-to-managed.cppを新規UCOメソッド対応に再生成

バグ修正

  • metasig.hGuid*パラメータの型エンコーディング修正(ELEMENT_TYPE_VALUETYPE使用)により、CoreLibBinder::LookupMethodLocalのアサーション失敗を解決
  • dynamicinterfacecastable.cpp:GCホール修正のためGCPROTECT_BEGINGetManagedClassObject()呼び出し前に移動
  • olevariant.cpp:不

#125512 Relax RandomAccess type requirements: make Read/Write methods work with non-seekable files

  • 作成者: @Copilot
  • 作成日時: 2026年03月12日 22:15:05(UTC)
  • マージ日時: 2026年03月22日 19:31:24(UTC)
  • ラベル: area-System.IO

概要

System.IO.RandomAccess の型検証を緩和し、パイプやソケットなどの非シークable ハンドルに対応しました。シークをサポートしないファイルでは、オフセット指定なしのシステムコールにフォールバックします。Unix 上の多重バッファ操作に readv/writev を導入し、System.ConsoleSystem.Diagnostics.Process の呼び出し箇所を RandomAccess.Read/Write に統合しました。

変更内容

  • RandomAccess 検証(公開API): Read*/Write* メソッドが非シークable ハンドルを受け入れるように変更。GetLength/SetLength はシークable ハンドルのみに制限。XML ドキュメントを ".NET 11 以降" の条件付きで更新
  • Unix ネイティブ実装: SystemNative_ReadV/SystemNative_WriteV を新規追加、EAGAIN/EWOULDBLOCK ポーリング処理と IOV_MAX キャップ対応
  • Interop 層: Interop.Sys.ReadV/WriteV P/Invoke バインディング追加
  • RandomAccess.Unix: シークできない場合に readv/writev へのフォールバック機構を実装
  • Console/Process 統合: ConsolePal.Unix.csConsolePal.Wasi.csConsolePal.Unix.ConsoleStream.cs で直接システムコール呼び出しを RandomAccess に置き換え、EPIPE ハンドリング保持
  • テスト追加: 非シークable ハンドル(単一/複数バッファ、同期/非同期、キャンセル、部分読取)のカバレッジ追加、ProcessWaitingTestsReadBlock に修正

パフォーマンスへの影響

多重バッファ操作で readv/writev システムコールを使用することにより、複数バッファ間のコピー回数を削減可能。非シークable ハンドル向けに FileStream の重い機能不要な場合、軽量な RandomAccess への移行により性能向上が期待される。具体的なベンチマーク値は提供されていません。

関連Issue

#58381

その他

  • 破壊的変更: なし。既存のシークable ハンドルの動作は変わらず、非シークable ハンドルの例外発生を廃止し動作するようになった
  • 互換性: .NET 10 以前では NotSupportedException を発生させた旧動作をドキュメントで記載
  • テスト状況: System.IO.FileSystem.Tests 全 9741 テスト合格、System.Console は 8 ターゲット全て(unix, windows, browser, wasi, android, ios, tvos, default)でビルド確認、ProcessWaitingTests も ReadBlock 修正で合格

#125446 Improve runtime-async support on linux-riscv64

  • 作成者: @am11
  • 作成日時: 2026年03月11日 14:28:51(UTC)
  • マージ日時: 2026年03月22日 23:47:26(UTC)
  • ラベル: area-CodeGen-coreclr community-contribution arch-riscv runtime-async

概要

RISC-V 64ビットアーキテクチャにおけるランタイム非同期サポートを改善するPR。LA64アーキテクチャに対する同様の改善(#125114, #124213)と同期させ、JITコード生成、ネイティブAOTランタイム、アセンブリヘルパーの実装を最適化・統一しています。

変更内容

  • src/coreclr/jit/codegenriscv64.cpp: JITコード生成最適化(45行)
  • src/coreclr/jit/emitriscv64.cpp: エミッタ処理改善(22行)
  • src/coreclr/jit/lclvars.cpp: ローカル変数処理の簡素化(16行削除)
  • src/coreclr/nativeaot/Runtime/riscv64/GcProbe.S: GCプローブ実装の改善(38行)
  • src/coreclr/nativeaot/Runtime/unix/unixasmmacrosriscv64.inc: マクロ定義追加(1行)
  • src/coreclr/vm/riscv64/asmhelpers.S: アセンブリヘルパー実装改善(12行)
  • src/coreclr/vm/riscv64/cgencpu.h: CPU依存コード最適化(5行)
  • src/coreclr/vm/riscv64/stubs.cpp: スタブ実装追加(2行)

これらの変更はJITコンパイラ、ネイティブAOT、ランタイムマネージャーなど複数のコアランタイムコンポーネントに影響します。

パフォーマンスへの影響

影響なし(記載なし)

関連Issue

#125114#124213(参考となったLA64向けPR)

その他

  • linux-riscv64プラットフォーム固有の変更
  • LA64アーキテクチャへの既存実装と一貫性を保つ同期作業
  • 破壊的変更、非推奨化、セキュリティ関連の情報なし

#121223 [SRM] Optimize MetadataBuilder.GetOrAddConstantBlob.

  • 作成者: @teo-tsirpanis
  • 作成日時: 2025年10月31日 00:03:44(UTC)
  • マージ日時: 2026年03月22日 23:54:01(UTC)
  • ラベル: area-System.Reflection.Metadata tenet-performance community-contribution

概要

MetadataBuilder.GetOrAddConstantBlobメソッドを最適化し、スカラー定数の書き込み時にプールされたBlobBuilderの代わりにスタック割り当てされたspanを使用することで、同じスカラー値を繰り返し書き込む場合に約2倍のパフォーマンス向上を実現しました。

変更内容

  • BlobWriterImpl.cs: 新しいWriteScalarConstantメソッドを追加し、スカラー定数をSpanに書き込んで書き込みバイト数を返すように実装
  • MetadataBuilder.Heaps.cs: GetOrAddConstantBlobメソッドをスタック割り当てバッファを使用するように リファクタリング
  • 既存のWriteConstantオーバーロードを更新し、非文字列値に対してWriteScalarConstantを呼び出すように変更

これは内部実装の最適化であり、公開APIの変更はありません。

パフォーマンスへの影響

  • スカラー値の定数書き込み時に不要なメモリ割り当てを排除
  • ベンチマーク結果によると同じスカラー値を繰り返し書き込む場合に約2倍のパフォーマンス向上を達成
  • スタック割り当てによりGCへの圧力を軽減

関連Issue

#121223

その他

なし


目次