注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #125920 Add null check ImmutableArray<T>.Builder.RemoveAll
- #125893 Improve HashSet<T> performance by enabling JIT bounds check elimination
- #125887 Fix multithreaded browser-wasm build: CS0102 errors in PortableThreadPool; remove redundant ThreadPoolBoundHandle.Browser.Threads.cs; regenerate WASM call helpers
- #125869 JIT: Null out exceptions in reused continuations and reenable continuation reuse
- #125823 Bump flatted from 3.3.3 to 3.4.2 in /src/native
- #125762 [main] Source code updates from dotnet/dotnet
- #125697 Convert remaining PREPARE_NONVIRTUAL_CALLSITE call sites to UnmanagedCallersOnly
- #125512 Relax RandomAccess type requirements: make Read/Write methods work with non-seekable files
- #125446 Improve runtime-async support on linux-riscv64
- #121223 [SRM] Optimize
MetadataBuilder.GetOrAddConstantBlob.
#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
その他
本変更はパブリック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
パフォーマンスへの影響
改善あり(値型+デフォルト比較子):
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
関連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
その他
継続再利用機能の再有効化に伴う修正です。例外オブジェクトの有無で例外の再スローを判定する仕組みに対応し、再利用時に例外状態を確実にリセットすることで、複数の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サフィックス版を追加- メタシグ型エンコーディング修正:
StartAssemblyLoad、StopAssemblyLoad、CallICustomQueryInterfaceでGuid*パラメータの型をP(C(GUID))→P(g(GUID))に修正(System.Guidは値型) ResolveUnmanagedDll等:メタシグの最初のパラメータをPtrStr→PtrCharに変更し、戻り値をアウトポインタではなく直接返すように更新
C#側:[UnmanagedCallersOnly]ラッパー追加
AssemblyLoadContext.CoreCLR.cs:初期化・アセンブリロード・DLL解決関連メソッドEnvironment.CoreCLR.cs:コマンドライン引数初期化、リソース文字列取得Thread.CoreCLR.cs:スレッド終了コールバック(OnThreadExiting→OnThreadExitedに改名)AssemblyName.CoreCLR.cs:CreateAssemblyName(インライン化)__ComObject.cs、ComWrappers.CoreCLR.cs、DynamicInterfaceCastableHelpers.csほか多数のInterop/マーシャリング関連クラスStubHelpers.cs:BSTRMarshalerのConvertToManaged/ConvertToNative(常にnullのネイティブバッファパラメータを削除)
C++呼び出しサイト変換
activitytracker.cpp、defaultassemblybinder.cpp、nativelibrary.cpp、olevariant.cpp、interoplibinterface_comwrappers.cpp他16ファイルでUnmanagedCallersOnlyCaller.InvokeThrowing*パターンに変換
WASM callhelpers再生成
callhelpers-reverse.cpp、callhelpers-pinvoke.cpp、callhelpers-interp-to-managed.cppを新規UCOメソッド対応に再生成
バグ修正
metasig.h:Guid*パラメータの型エンコーディング修正(ELEMENT_TYPE_VALUETYPE使用)により、CoreLibBinder::LookupMethodLocalのアサーション失敗を解決dynamicinterfacecastable.cpp:GCホール修正のためGCPROTECT_BEGINをGetManagedClassObject()呼び出し前に移動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.Console と System.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/WriteVP/Invoke バインディング追加 - RandomAccess.Unix: シークできない場合に readv/writev へのフォールバック機構を実装
- Console/Process 統合:
ConsolePal.Unix.cs、ConsolePal.Wasi.cs、ConsolePal.Unix.ConsoleStream.csで直接システムコール呼び出しをRandomAccessに置き換え、EPIPE ハンドリング保持 - テスト追加: 非シークable ハンドル(単一/複数バッファ、同期/非同期、キャンセル、部分読取)のカバレッジ追加、
ProcessWaitingTestsをReadBlockに修正
パフォーマンスへの影響
多重バッファ操作で readv/writev システムコールを使用することにより、複数バッファ間のコピー回数を削減可能。非シークable ハンドル向けに FileStream の重い機能不要な場合、軽量な RandomAccess への移行により性能向上が期待される。具体的なベンチマーク値は提供されていません。
関連Issue
その他
- 破壊的変更: なし。既存のシーク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
その他
なし