Pull Request on 2026年02月04日

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

注意点

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


目次

  1. #124002 Clarify AddFilter parameter documentation
  2. #123993 SPMI: Fix TOC logic broken after PAL cleanup
  3. #123985 Temporarily disable ios_arm64 platform builds
  4. #123980 Fix timeout/duration calculations using monotonic time and precise tick accumulation
  5. #123974 [release/11.0-preview1] Revert [browser] Use Runtime=NET for build tasks
  6. #123973 Revert "[browser] Use Runtime=NET for build tasks in WebAssembly SDK"
  7. #123967 Remove MethodDescCallSite in appdomain.cpp
  8. #123965 Add PrivateAssets to PackageReference in Microsoft.NET.Sdk.IL
  9. #123955 Make all fields in AssertionDscOp1 and AssertionDscOp2 private
  10. #123954 Add SSE implementation to Matrix4x4.GetDeterminant
  11. #123948 JIT: Refactor liveness into its own class
  12. #123938 [release/9.0-staging] Update MsQuic version to 2.4.16
  13. #123937 [release/8.0-staging] Update MsQuicSchannelVersion to 2.4.16
  14. #123926 JIT: Standardize Compiler* field naming to m_compiler
  15. #123914 Port backreference SequenceEquals optimization to RegexCompiler
  16. #123865 Avoid throwing exceptions in Process.KillTree during process enumeration
  17. #123825 [release/10.0] Fix internal validation pipeline
  18. #123800 Fix XDocument.LoadAsync to not use sync reads
  19. #123759 [wasm][coreclr] Fix reflection with large valuetypes
  20. #123734 Override ResolveReadyToRunCompilers for TestReadyToRun=true test builds
  21. #123652 [release/9.0-staging] Update dependencies from dotnet/cecil
  22. #123478 Add OpenStandardInputHandle, OpenStandardOutputHandle, and OpenStandardErrorHandle APIs
  23. #123468 [release/9.0-staging] Update dependencies from dotnet/runtime-assets
  24. #123273 [clr-interp] Convert call stub logging to LOG2 facility

#124002 Clarify AddFilter parameter documentation

  • 作成者: @Copilot
  • 作成日時: 2026年02月04日 13:05:12(UTC)
  • マージ日時: 2026年02月04日 22:22:46(UTC)
  • ラベル: documentation area-Extensions-Logging

概要

Microsoft.Extensions.LoggingAddFilterメソッドのXML文書化を改善し、フィルター関数のパラメータ(string?型)の意味を明確化しました。プロバイダータイプ名、カテゴリ名、ログレベルなどのパラメータの役割と、戻り値(trueでログを許可、falseでフィルタリング)の意味を詳細に記載しました。

変更内容

  • FilterLoggingBuilderExtensions.cs:
    • Func<string?, string?, LogLevel, bool>オーバーロード(8メソッド)の<param>タグを拡張
    • Func<string?, LogLevel, bool>オーバーロードのパラメータ説明を追加
    • <remarks>セクションに具体例を含むリスト説明を追加
    • LoggerFilterOptionsメソッドのILoggingBuilder参照エラーを修正
    • 戻り値の意味を明確化(ログ許可/フィルタリング)

パフォーマンスへの影響

影響なし

関連Issue

  • dotnet/runtime#123995(ユーザーがカスタムフィルタリングルール実装時にパラメータの意味が不明確であった問題を解決)

その他

なし


#123993 SPMI: Fix TOC logic broken after PAL cleanup

  • 作成者: @jakobbotsch
  • 作成日時: 2026年02月04日 10:13:50(UTC)
  • マージ日時: 2026年02月04日 17:40:57(UTC)
  • ラベル: area-CodeGen-coreclr

概要

PR #116096のPALクリーンアップ後、SPMI(SuperPMI)のTOC(Table of Contents)ファイル検出ロジックが反転していたバグを修正しました。この不具合により、TOCファイルが使用されず、superpmi-diffsのパフォーマンスが大幅に低下していました。修正により、asmdiff生成処理が約55倍高速化されました。

// 修正内容のイメージ
// Before: if (fileExists) { skip TOC file }
// After:  if (!fileExists) { skip TOC file }

変更内容

  • src/coreclr/tools/superpmi/superpmi-shared/methodcontextreader.cpp (+1/-1)
    • CheckForPairedFile関数内のファイル存在確認ロジックに否定演算子(!)を追加
    • TOCファイルの有無判定条件が正しく機能するように修正

パフォーマンスへの影響

大幅な改善

  • 修正前:~2554.6ms(TOCファイル未使用)
  • 修正後:~46.1ms(TOCファイル使用)
  • 改善率:約55倍高速化

この修正により、特定のasmdiff生成処理が数分かかっていた問題が解決され、数十ミリ秒レベルの処理に改善されました。

関連Issue

関連するPR:#116096(PAL cleanup)

その他

このバグにより、#116096以降、SPMIが実質的にTOCファイルを使用できていませんでした。1行の修正で大幅なパフォーマンス回復が実現された典型的なリグレッション修正です。


#123985 Temporarily disable ios_arm64 platform builds

  • 作成者: @kotlarmilos
  • 作成日時: 2026年02月04日 07:50:24(UTC)
  • マージ日時: 2026年02月04日 12:12:26(UTC)
  • ラベル: area-Infrastructure os-ios

概要

iOS ARM64プラットフォームでのアプリインストール失敗の問題により、CI/CDパイプラインからios_arm64ビルドを一時的に無効化しました。tvOS ARM64ビルドは継続して実行されます。問題追跡用のGitHub Issueにリンクされています。

変更内容

  • eng/pipelines/runtime.yml: ios_arm64プラットフォームをコメントアウト(tvOS ARM64は有効のまま)
  • eng/pipelines/extra-platforms/runtime-extra-platforms-ioslike.yml: iOS関連の全ての追加プラットフォームジョブからios_arm64を無効化

両ファイルに追跡用Issue参照コメント付き(#123796、#122874)

パフォーマンスへの影響

影響なし。(CI/CDのビルドスキップにより、パイプライン実行時間は短縮される可能性があります)

関連Issue

  • #123796
  • #122874

その他

  • tvOS ARM64デバイスは正常に動作しているため、デバイス接続の問題がiOS ARM64に限定されていることが示唆されています
  • エンジニアリングチームによる本格的な調査が予定されています
  • 本変更は一時的な対応であり、根本的な修正を待つ状態です

#123980 Fix timeout/duration calculations using monotonic time and precise tick accumulation

  • 作成者: @Copilot
  • 作成日時: 2026年02月04日 04:43:41(UTC)
  • マージ日時: 2026年02月04日 13:07:27(UTC)
  • ラベル: area-System.Net.Sockets

概要

TimeSpan.Milliseconds(0-999の成分値)とTimeSpan.TotalMilliseconds(総ミリ秒数)の誤用を修正するPRです。System.Net.Socketsではタイムアウト計算が非単調時間源を使用していた問題も解決します。例えば2.5秒経過時、.Millisecondsは500を返しますが.TotalMillisecondsは2500.0を返します。

// 修正前(間違い)
timeout -= (DateTime.UtcNow - waitStart).Milliseconds;  // 1秒以上経過時に大幅に短縮

// 修正後(正しい)
long waitStart = Stopwatch.GetTimestamp();
timeout -= (int)Stopwatch.GetElapsedTime(waitStart).TotalMilliseconds;

変更内容

System.Net.Sockets/SocketAsyncContext.Unix.cs(1391行、1414行)

  • タイムアウト計算でミリ秒成分のみを減算していた問題を修正
  • DateTime.UtcNowからStopwatch.GetTimestamp()へ変更
  • .Millisecondsから.TotalMillisecondsへ変更

System.Speech/EngineSite.cs(483行、488行、493行)

  • フォネーム継続時間の累積が成分値のみを加算していた問題を修正
  • 整数値ミリ秒からTimeSpan.Ticksを直接累積に変更

パフォーマンスへの影響

System.Net.Sockets

  • 改善点:単調時間源(Stopwatch)使用により、システムクロック調整(NTP補正、手動時刻変更)に影響されない堅牢なタイムアウト計算を実現。1秒以上のタイムアウトで待機時間が大幅に過剰になる問題を解決
  • 懸念点:なし

System.Speech

  • 改善点:Ticks直接累積により浮動小数点変換時の丸め誤差を排除。1秒以上にわたるフォネーム継続時間の精度向上
  • 懸念点:なし

関連Issue

なし

その他

  • 変更は内部実装の修正で、公開APIの変更なし
  • 2ファイルの修正で計6行の変更(増4減2)
  • レビュアーコメント内で、複数シグナルに関するリグレッションテストの追加を検討する価値があると指摘されている

#123974 [release/11.0-preview1] Revert [browser] Use Runtime=NET for build tasks

  • 作成者: @lewing
  • 作成日時: 2026年02月03日 22:55:18(UTC)
  • マージ日時: 2026年02月04日 09:57:02(UTC)
  • ラベル: Servicing-approved area-Build-mono

概要

PR #123304で導入されたRuntime="NET"属性を使用したWebAssembly SDK pack タスクの最適化を取り消すバックポート。この機能がSDK形式のプロジェクトでのみサポートされており、Blazorテストが失敗するため、マルチターゲティング(net11.0 + net472)とMSBuildRuntimeType ベースのTFM選択に戻します。

// 復元されるマルチターゲティング
<PropertyGroup>
  <TargetFrameworks>$(NetCoreAppToolCurrent);$(NetFrameworkToolCurrent)</TargetFrameworks>
</PropertyGroup>

// Runtime="NET"からTaskHostFactoryに戻す
<UsingTask TaskName="..." TaskFactory="TaskHostFactory" ... />

変更内容

  • Microsoft.NET.Sdk.WebAssembly.Pack.Tasks.csproj: マルチターゲティングを復元し、アセンブリをTFM別サブディレクトリに配置
  • Microsoft.NET.Sdk.WebAssembly.Browser.targets: _WebAssemblySdkTasksTFMプロパティでMSBuildRuntimeType ベース選択を復元、UsingTaskでTaskHostFactoryを使用
  • WasmApp.InTree.props: ツールディレクトリパスを更新してTFM構造を復元
  • trimmingTests.targets: パスプレースホルダーを更新
  • GenerateWasmBootJson.cs: マルチターゲティング対応コードを追加

パフォーマンスへの影響

影響なし(機能の復元であり、パフォーマンス特性は変わらない)

関連Issue

  • PR #123973(main ブランチでの同一内容のリバート)
  • PR #123304(リバート対象の元のPR)

その他

これはセキュリティリリース/プレビューブランチへのバックポート。Blazorテストの失敗を修正するための必須変更。SDK形式以外のプロジェクトとの互換性を維持するため、マルチターゲティング方式に戻すことで、プロジェクト形式に依存しないビルド タスク実行を確保しています。


#123973 Revert "[browser] Use Runtime=NET for build tasks in WebAssembly SDK"

  • 作成者: @lewing
  • 作成日時: 2026年02月03日 22:47:17(UTC)
  • マージ日時: 2026年02月04日 09:35:37(UTC)
  • ラベル: area-Build-mono

概要

PR #123304で導入されたRuntime="NET"アプローチをリバートする変更です。WebAssembly SDKのビルドタスクをマルチターゲット(net11.0 + net472)に戻し、TaskFactory="TaskHostFactory"と TFM ベースの選択を復活させます。理由はRuntime="NET"がSDKスタイルプロジェクトのみでサポートされており、非SDKスタイルプロジェクトから呼び出すと失敗するため、および.NET Runtime Task Host インフラがまだ成熟していないためです。

変更内容

ファイル 変更内容
Microsoft.NET.Sdk.WebAssembly.Pack.Tasks.csproj マルチターゲット設定を復活(TargetFrameworks に net11.0 と net472 を指定)、NuGetパッケージ内の tools\<tfm>\ 配下に TFM 固有アセンブリを配置
Microsoft.NET.Sdk.WebAssembly.Browser.targets _WebAssemblySdkTasksTFM プロパティと TaskHostFactory ベースの <UsingTask> 宣言を復活、MSBuildRuntimeType に応じた適切なアセンブリ選択
WasmApp.InTree.props ツールディレクトリパスを設定レベルに更新、TFM 固有アセンブリの検出に対応
trimmingTests.targets WasmSdkPackTasksPath プレースホルダーをリバート後のレイアウトに合わせて更新
GenerateWasmBootJson.cs メタデータ追加(詳細不明)

パフォーマンスへの影響

影響なし(互換性復旧が主目的)

関連Issue

その他

互換性への影響:このリバートにより、WebAssembly SDK タスクは SDK スタイルと非 SDK スタイル両方のプロジェクトで再び動作します。Blazor テストで発生していた ArgumentNullException(.NET Runtime Task Host が見つからない場合)が解決されます。Runtime="NET"アプローチは MSBuild がこの機能を広くサポートするまで延期されます。


#123967 Remove MethodDescCallSite in appdomain.cpp

  • 作成者: @AaronRobinsonMSFT
  • 作成日時: 2026年02月03日 21:47:21(UTC)
  • マージ日時: 2026年02月04日 19:14:29(UTC)
  • ラベル: area-VM-coreclr

概要

このPRは、appdomain.cpp内で使用されていたMethodDescCallSiteを削除し、より効率的なメソッド呼び出しメカニズムに置き換えるリファクタリングです。CoreCLRのメソッド呼び出し処理を簡潔化し、保守性を向上させることが目的です。Issue #123864に貢献しています。

変更内容

  • appdomain.cpp (-53行): MethodDescCallSiteの削除とメソッド呼び出しロジックの簡潔化
  • callhelpers.h (+8行): 新しいヘルパー関数やマクロの追加
  • corelib.h (±0行): 関連する定義の調整
  • metasig.h (-1行): メタデータシグネチャ関連の最適化
  • AssemblyLoadContext.CoreCLR.cs (-19行): CoreCLR側の不要なコードの削除
  • AssemblyLoadContext.cs (+103行): マネージド側での代替実装の追加
  • callhelpers-reverse.cpp (+99行): WebAssembly向けの呼び出しヘルパーの拡張

パフォーマンスへの影響

軽微な改善が期待できます。MethodDescCallSiteの削除により、不要なオーバーヘッドが削減され、メソッド呼び出しパスがより効率化される可能性があります。ただし、具体的なベンチマーク結果は提供されていません。

関連Issue

Issue #123864

その他

  • WebAssembly対応コード(callhelpers-reverse.cpp)の大幅な拡張が含まれており、プラットフォーム固有の最適化が実施されています
  • 7ファイル中7ファイルがCopilot AIレビューで確認済み
  • 複数のレビュー反復を経て承認されています

#123965 Add PrivateAssets to PackageReference in Microsoft.NET.Sdk.IL

  • 作成者: @ViktorHofer
  • 作成日時: 2026年02月03日 21:29:56(UTC)
  • マージ日時: 2026年02月04日 04:13:45(UTC)
  • ラベル: needs-area-label

概要

Microsoft.NET.Sdk.IL プロジェクトファイルの PackageReference に PrivateAssets="all" 属性を追加し、ビルド時の依存パッケージ(Microsoft.DotNet.Build.Tasks.Templating)が NuGet パッケージの推移的依存関係として公開されることを防ぐ変更です。これにより、P1 への影響回避とパッケージ解決の問題を修正します。

変更内容

  • ファイル: src/coreclr/.nuget/Microsoft.NET.Sdk.IL/Microsoft.NET.Sdk.IL.proj
    • Microsoft.DotNet.Build.Tasks.Templating PackageReference に PrivateAssets="all" を追加
    • Project 宣言後に空行を追加
    • GenerateFileFromTemplate タスク前の空行を削除(フォーマット調整)

パフォーマンスへの影響

影響なし

関連Issue

https://github.com/dotnet/dotnet/issues/4638

その他

本変更はビルド時依存の管理に関するもので、ランタイム実行には影響しません。PrivateAssets="all" により、このパッケージは当該プロジェクトの NuGet パッケージ メタデータに記載されず、消費者には推移的依存関係として公開されなくなります。これにより、ダウンストリームでのパッケージ解決問題が解決される見込みです。


#123955 Make all fields in AssertionDscOp1 and AssertionDscOp2 private

  • 作成者: @EgorBo
  • 作成日時: 2026年02月03日 18:58:55(UTC)
  • マージ日時: 2026年02月04日 21:10:10(UTC)
  • ラベル: area-CodeGen-coreclr

概要

このPRは、JITコンパイラのAssertionDscAssertionDscOp1AssertionDscOp2構造体の全フィールドをprivateに変更し、公開getterで検証ロジック付きで公開する変更です。アサーション値が不正なコンテキストで変更されることを防ぎ、メモリレイアウトの最適化(64ビットで40バイト)を実現しています。フィールド名をm_プレフィックスに統一し、JitDumpの出力も改善されています。

変更内容

  • assertionprop.cpp: アサーション処理ロジック内のフィールドアクセスを新しいgetterで置き換え(+229/-327行)
  • compiler.h: AssertionDscAssertionDscOp1AssertionDscOp2の定義を修正。全フィールドをprivate化し、公開getterで検証アサーション付きで公開。フィールド名をm_プレフィックスに統一(+311/-159行)
  • compiler.hpp: テンプレート実装の軽微な調整
  • morph.cpp: フィールドアクセスをgetterに変更(+12/-10行)
  • rangecheck.cpp: フィールドアクセスをgetterに変更(+16/-16行)

パフォーマンスへの影響

改善: 構造体のメモリレイアウト最適化により、64ビット環境でのAssertionDscサイズを40バイトに削減(unionの活用)。作成者の見積では32バイトへの更なる最適化の余地あり。ゲッターアクセスのオーバーヘッドはDebugビルドのみ(検証用asserts)のため、Releaseビルドでは変わらず。

関連Issue

なし

その他

  • 潜在的バグの修正がこのプロセス内で発生した可能性あり
  • アサーション値がFactory メソッドおよびReverseEqualityメソッド外で決して変更されないことが保証される
  • JitDump出力が改善され、デバッグ時の可視性向上

#123954 Add SSE implementation to Matrix4x4.GetDeterminant

  • 作成者: @alexcovington
  • 作成日時: 2026年02月03日 18:32:12(UTC)
  • マージ日時: 2026年02月04日 23:40:13(UTC)
  • ラベル: area-System.Numerics tenet-performance community-contribution

概要

Matrix4x4.GetDeterminantにSSE(Streaming SIMD Extensions)実装を追加しました。ベクトル化により約15%のパフォーマンス向上を実現しています。ベンチマーク結果では3.487nsから2.971nsへの改善が確認されており、Ratio 0.85を達成しています。

変更内容

  • System/Numerics/Matrix4x4.Impl.cs: SSE実装を追加(+66行)
    • GetDeterminantメソッドの行列式計算をベクトル化
    • 既存の非ベクトル実装の代替として機能

パフォーマンスへの影響

改善あり

ベンチマーク結果(Perf_Matrix4x4.GetDeterminantBenchmark):

  • 実行時間: 3.487 ns → 2.971 ns(約15%削減)
  • Ratio: 0.85(ベースライン比)
  • メモリ割り当て: 変化なし
  • 安定性: StdDevが低く(0.0099ns)、安定した改善

SSE命令の活用により、複数の浮動小数点演算を並列実行することで、スカラー演算に比べて実行効率が向上しています。

関連Issue

なし

その他

  • 本変更はパフォーマンス向上のみで、APIの互換性への影響はありません
  • SSE対応プロセッサ環境での動作を想定しており、対応していない環境でのフォールバック処理は既存の仕組みに依存していると考えられます

#123948 JIT: Refactor liveness into its own class

  • 作成者: @jakobbotsch
  • 作成日時: 2026年02月03日 16:09:27(UTC)
  • マージ日時: 2026年02月04日 08:34:13(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JITコンパイラのliveness解析(変数の生存期間分析)を独立したクラスに再構成するリファクタリングです。将来の非同期変換時にliveness解析を修正可能にするための基盤整備で、拡張性を高めながらゼロコストの設計を実現しています。

変更内容

ファイル 変更内容
compiler.h liveness関連の定義をcompilerクラスから削除(-61行)
fgopt.cpp liveness呼び出しの整理(-19行)
lclvars.cpp liveness処理を独立モジュールへ移行(-428行)
liveness.cpp liveness解析を専用クラスに実装(+2194行、新規実装部分を追加)

主な変更は、liveness解析ロジックをliveness.cppに集約し、compilerクラスから独立させることで、モジュール性と拡張性を向上させました。

パフォーマンスへの影響

TP(throughput)回帰が予想されます(特にMSVC)。これは異なるインライニング判定に起因しますが、PGO(Profile Guided Optimization)の適用により改善が期待されます。

ランタイムパフォーマンスに対する直接的な負の影響は想定されず、むしろ将来の最適化(非同期変換など)につながる設計改善です。

関連Issue

PR番号: #123948

その他

  • このリファクタリングはJIT内部実装の構造化であり、公開APIへの影響なし
  • 互換性への影響なし(内部実装変更のみ)
  • 非同期変換などの将来機能追加時に、liveness解析を再利用可能にするための基盤整備

#123938 [release/9.0-staging] Update MsQuic version to 2.4.16

  • 作成者: @ManickaP
  • 作成日時: 2026年02月03日 12:04:25(UTC)
  • マージ日時: 2026年02月04日 12:27:27(UTC)
  • ラベル: Servicing-approved area-System.Net.Quic

概要

MsQuic(マイクロソフトのQUICプロトコル実装)をバージョン2.4.16に更新するリリースブランチのバックポートです。このパッチバージョン更新により、Windows環境でのQUIC通信のサポートが改善されます。既にメインブランチと.NET 10で数ヶ月間安定稼働しているため、低リスクの変更です。

変更内容

  • eng/Versions.props: MsQuicバージョンを2.4.16に更新(1行追加、1行削除)

パフォーマンスへの影響

影響なし(パッチバージョンの更新のため、ランタイムパフォーマンスへの直接的な変更は予想されません)

関連Issue

なし(バージョン更新の定期メンテナンスタイプのPR)

その他

  • 回帰テスト結果: なし(新規の不具合は報告されていません)
  • 顧客影響: なし
  • リスク評価: 低(パッチバージョンのみの更新であり、メインブランチと.NET 10で実績のあるバージョンへの更新)
  • テスト方法: 自動テストにより検証済み
  • 本PR元: dotnet/runtime#121198からのバックポート

#123937 [release/8.0-staging] Update MsQuicSchannelVersion to 2.4.16

  • 作成者: @ManickaP
  • 作成日時: 2026年02月03日 12:01:11(UTC)
  • マージ日時: 2026年02月04日 12:27:32(UTC)
  • ラベル: Servicing-approved area-System.Net.Quic

概要

dotnet/runtime の Windows 環境において、MsQuic ライブラリのバージョンを 2.4.16 に更新するバックポートです。メインブランチと .NET 10 では既に数ヶ月間このバージョンで運用されており、安定性が確認されています。

変更内容

  • eng/Versions.props: MsQuicSchannelVersion を 2.4.16 に更新(1行追加、1行削除)

パフォーマンスへの影響

影響なし。パッチバージョンのみの更新であり、パフォーマンスに関連する変更はありません。

関連Issue

なし

その他

  • リスク評価: Low - パッチバージョンのみの更新であり、メインブランチと .NET 10 で既に長期間の検証実績がある
  • テスト: 自動テストで検証済み
  • 回帰: なし
  • 顧客への影響: なし

#123926 JIT: Standardize Compiler* field naming to m_compiler

  • 作成者: @AndyAyersMS
  • 作成日時: 2026年02月03日 01:42:12(UTC)
  • マージ日時: 2026年02月04日 05:20:51(UTC)
  • ラベル: area-CodeGen-coreclr

概要

このPRはJITコンパイラの約40のクラス・構造体におけるCompiler*フィールドの命名を統一し、すべてm_compilerという一貫した名前に標準化しています。これまでm_compm_pCompm_pCompilercompcompilerなど多様な命名パターンが混在していた部分を整理し、コード可読性と保守性を向上させています。

変更内容

  • 影響範囲: JIT関連の約40ファイル、計3000行以上の変更

  • 主な変更対象クラス:

    • CodeGenInterfaceLinearScanemitterPhaseおよびそのサブクラス
    • ValueNumStoreGCInfoRangeCheckSsaBuilder
    • BitVecTraitsDataFlowhashBvInlineStrategy
    • 各.cppファイルのローカルヘルパークラス
  • 置換された命名パターン: m_compm_compilerm_pCompm_compilerm_pCompilerm_compilercompm_compilerpCompm_compileremitCompm_compilerdisCompm_compileruwiCompm_compilerm_rsCompilerm_compiler

パフォーマンスへの影響

影響なし。本変更はリファクタリングであり、フィールド名の統一のみで、実行時の動作や性能には影響しません。

関連Issue

なし

その他

  • テスト: x64上のDebugおよびReleaseビルドで検証済み
  • 自動化: コード書き換えおよびテストはCopilot CLIにより実施
  • フォーマット: jit-format formatting fixsが適用済み
  • 破壊的変更: これは内部実装の命名統一であり、公開APIの変更ではありません

#123914 Port backreference SequenceEquals optimization to RegexCompiler

  • 作成者: @stephentoub
  • 作成日時: 2026年02月02日 21:32:01(UTC)
  • マージ日時: 2026年02月04日 13:08:08(UTC)
  • ラベル: area-System.Text.RegularExpressions

概要

RegexCompilerの正規表現バックリファレンスマッチング処理にパフォーマンス最適化を追加しました。大文字小文字を区別する場合にSequenceEqualを使用することで、文字ごとの比較から効率的なスパン比較に変更。これにより、RegexSourceGeneratorと同じ最適化アプローチが実装されました。

// 最適化前:文字ごとの比較
// 最適化後:SequenceEqualによるスパン比較
if (spanA.SequenceEqual(spanB))
{
    // マッチ処理
}

変更内容

  • RegexCompiler.cs:バックリファレンス マッチング ロジックを大文字小文字区別有無で分離し、SpanSequenceEqualSpanMethodフィールドを追加してケース感度別の処理パスを実装
  • Regex.Match.Tests.csRightToLeftおよびIgnoreCaseオプション組み合わせのバックリファレンステストを66行追加し、実装の妥当性を検証

パフォーマンスへの影響

改善点SequenceEqualを使用することで、大文字小文字区別時のバックリファレンス比較が文字ごとの比較から一括スパン比較に変更され、メモリ参照パターンの最適化とCPU命令削減が期待できます。特に長い部分文字列のバックリファレンスマッチング時に効果的。

懸念点:なし。既存のSourceGeneratorで検証済みのパターンの採用のため、回帰リスク最小。

関連Issue

なし

その他

  • RegexSourceGeneratorとRegexCompilerの実装が一貫性を持つようになり、メンテナンス性が向上
  • テスト追加によりRightToLeftIgnoreCaseの組み合わせケースの動作保証が強化

#123865 Avoid throwing exceptions in Process.KillTree during process enumeration

  • 作成者: @Copilot
  • 作成日時: 2026年02月02日 03:16:21(UTC)
  • マージ日時: 2026年02月04日 22:48:29(UTC)
  • ラベル: area-System.Diagnostics.Process

概要

Process.KillTreeがプロセス列挙中に大量の例外をスロー・キャッチしていた問題を修正しました。デバッガ接続時に23秒かかっていた処理が0.17秒に改善されます。非スロー型のヘルパーメソッド(TryGetStartTimeTryGetParentProcessId)を追加し、例外を最小限に削減しながらプロセスツリーの終了機能を維持します。

// 修正前:例外が大量に発生
process.StartTime;  // アクセス不可なプロセスでException

// 修正後:例外なし
TryGetStartTime(out DateTime startTime);  // bool戻り値で安全

変更内容

  • ProcessManager.Windows.cs: OpenProcessthrowOnError=false時、エラーをキャッチしたら即座にSafeProcessHandle.InvalidHandleを返却
  • Process.Win32.cs:
    • TryGetStartTime(out DateTime) ヘルパー追加(例外をスロー不)
    • TryGetParentProcessId(out int) ヘルパー追加(例外をスロー不)
    • IsParentOfを非スロー型ヘルパーに置き換え
    • EqualsをプロセスID優先チェック(低コスト)に最適化
  • ProcessTests.Windows.cs: Kill_EntireProcessTree_MinimalExceptionsテスト追加(例外数≤5を検証)

パフォーマンスへの影響

改善: デバッガ接続時に23秒→0.17秒に短縮(約135倍高速化)。プロセス列挙中の例外スロー・キャッチ削減により、SEH(Structured Exception Handling)のオーバーヘッド大幅削減。デバッガなし環境での影響は最小限。

関連Issue

dotnet/runtime#121279(Issue: Process.KillTree throws a lot of exceptions internally

その他

  • テスト実行: 全Kill関連テスト合格(管理者権限あり/なし両方)
  • 互換性: パブリックAPI変更なし、内部実装のみ改善
  • セキュリティ: 影響なし

#123825 [release/10.0] Fix internal validation pipeline

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年01月30日 23:36:59(UTC)
  • マージ日時: 2026年02月04日 20:53:42(UTC)
  • ラベル: Servicing-approved area-Infrastructure

概要

.NET 10.0向けのリリースブランチにおいて、内部ビルドの検証パイプラインを修正するインフラストラクチャのみの変更です。VMR(Unified Repository)からのバックフロー検証を有効化するために、NuGetソース認証の設定を一元化し、内部ビルド用のHelixキューを適切に選択するように修正されています。

変更内容

  • eng/pipelines/common/global-build-job.yml: 手動NuGet認証設定を廃止し、enable-internal-sources.ymlテンプレートに統一
  • eng/pipelines/libraries/run-test-job.yml: templatePathパラメータを追加、NuGet認証設定をテンプレート化
  • eng/pipelines/diagnostics/runtime-diag-job.yml: 手動NuGet認証設定をテンプレート化
  • eng/pipelines/coreclr/templates/helix-queues-setup.yml: パブリック/内部ビルド分岐を追加、iOS/Android/tvOS/Browser WASMプラットフォーム用のキュー選択ロジックを実装
  • eng/pipelines/libraries/helix-queues-setup.yml: Androidキュー選択ロジックを修正(内部ビルド時はUbuntu系キューを使用)
  • eng/pipelines/common/templates/runtimes/xplat-job.yml: NuGet認証テンプレート呼び出しを追加

パフォーマンスへの影響

影響なし

このPRはCI/CDパイプラインの構成に関する変更であり、実行時のランタイムパフォーマンスには影響しません。

関連Issue

#123444(main PRは#123452)

その他

  • この変更はインフラストラクチャのみの修正で、顧客への直接的な影響はありません
  • .NET 9以降では、csprojへのNuGetパッケージ編集によるバージョン管理が不要になりました
  • パブリックビルドと内部/オフィシャルビルドの区別を明確にすることで、正しいHelixキューが使用されることを保証します

#123800 Fix XDocument.LoadAsync to not use sync reads

  • 作成者: @lilinus
  • 作成日時: 2026年01月30日 14:41:48(UTC)
  • マージ日時: 2026年02月04日 22:22:06(UTC)
  • ラベル: area-System.Xml community-contribution

概要

XDocument.LoadAsyncが同期読み込みを使用していた問題を修正します。このメソッドを非同期コンテキストで呼び出す際に、スレッドプールのスレッドをブロックする問題が解決されます。

変更内容

  • XDeclaration.cs (+10): 非同期読み込み対応の追加
  • XDocument.cs (+12/-4): LoadAsyncメソッドの実装を同期読み込みから真の非同期読み込みに変更
  • LoadSaveAsyncTests.cs (+34): 非同期読み込みの動作を検証するテストケース追加

パフォーマンスへの影響

リソース利用の効率化に貢献します。従来の実装ではスレッドプール上のスレッドが同期読み込み中にブロックされていましたが、修正後は非同期I/O操作を適切に使用するため、スレッドリソースをより効率的に活用できます。特に大量の非同期読み込み操作を並行実行するシナリオで効果的です。

関連Issue

Issue #100239

その他

  • Copilotによる自動レビューでは新しいコメントが生成されていません(コード品質上の問題なし)
  • stephentoubによるレビューが含まれており、コア開発者による検査済みです

#123759 [wasm][coreclr] Fix reflection with large valuetypes

  • 作成者: @radekdoulik
  • 作成日時: 2026年01月29日 15:50:26(UTC)
  • マージ日時: 2026年02月04日 10:54:40(UTC)
  • ラベル: arch-wasm area-VM-coreclr

概要

WebAssembly上のCoreClRで、大きなバリュー型(large valuetypes)に対するリフレクション呼び出しのサポートを実装しました。thisポインタと戻り値バッファ(retbuf)の引数順序を変更し、新しい呼び出し規約に対応しています。この修正により、Pri0テストで6個、Pri1テストで約2000個のテストが修正されます。

// 大きなバリュー型をリフレクションで呼び出す場合の改善
public struct LargeValueType
{
    public long Field1;
    public long Field2;
    // ... large data
}

// リフレクションを使用した呼び出しが正常に動作するようになりました
object result = method.Invoke(target, parameters);

変更内容

  • callingconvention.h: 新しい呼び出し規約サポートの定義追加(24行追加)
  • wasm/calldescrworkerwasm.cpp: WebAssemblyプラットフォーム向けの呼び出し記述子ワーカー実装を更新(26行追加)
  • interpreter/compiler.cpp, compileropt.cpp: インタプリタコンパイラの呼び出し処理を最適化
  • callhelpers.cpp/h: 呼び出しヘルパー関数に新しいシグネチャを追加
  • reflectioninvocation.cpp: リフレクション呼び出しの処理を更新
  • clr-abi.md: ABI設計ドキュメント更新
  • VectorMgdMgdArray.cs: テストコードの軽微な修正

パフォーマンスへの影響

メモリコピー処理の簡素化により、インタプリタ呼び出しのパフォーマンスが向上する可能性があります。新しい呼び出し規約による最適化で、大きなバリュー型の引き渡しがより効率的になります。具体的なベンチマーク数値の記載はありません。

関連Issue

その他

WebAssemblyプラットフォーム特有の実装を中心とした修正で、calling conventionの標準化に向けた段階的な改善です。JIT/Directed/Directed_3ランタイムテストが再現方法として使用されました。


#123734 Override ResolveReadyToRunCompilers for TestReadyToRun=true test builds

  • 作成者: @jkoritzinsky
  • 作成日時: 2026年01月28日 22:13:54(UTC)
  • マージ日時: 2026年02月04日 01:08:39(UTC)
  • ラベル: needs-area-label

概要

ReadyToRun (R2R) テスト ビルドにおいて、ResolveReadyToRunCompilers を適切にオーバーライドするための変更です。テスト ビルド構成でReadyToRunコンパイラーの解決プロセスを制御し、特定のテストシナリオでの動作を改善します。Issue #123499 の修正に対応しています。

変更内容

  • eng/testing/tests.readytorun.targets: ReadyToRunテスト用の新規ターゲットファイルに ResolveReadyToRunCompilers のオーバーライド定義を追加 (+17行)
  • eng/testing/tests.singlefile.targets: シングルファイル展開テスト構成から関連するコンパイラー解決ロジックを整理 (-23行、+8行の修正)
  • src/libraries/System.ComponentModel.TypeConverter/tests/TypeDescriptorTests.cs: テスト構成の更新 (+1行)
  • src/libraries/System.Private.Xml/tests/XmlSerializer/XmlSerializerTests.cs: テスト構成の更新 (+1行)

パフォーマンスへの影響

影響なし。本変更はテストビルドの構成とコンパイラー解決ロジックの整理であり、ランタイムパフォーマンスには直接的な影響はありません。

関連Issue

Issue #123499

その他

  • 変更はビルド時の動作 (eng/testing ディレクトリ内) とテスト構成に限定されており、ランタイム実装への影響はありません
  • ReadyToRunコンパイラーの解決プロセスを統一・明確化することで、テストの安定性と保守性が向上する可能性があります

#123652 [release/9.0-staging] Update dependencies from dotnet/cecil

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年01月27日 02:02:18(UTC)
  • マージ日時: 2026年02月04日 23:56:57(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/cecil ライブラリの依存関係を 0.11.5-alpha.26065.1 から 0.11.5-alpha.26075.3 にアップデートするPull Request です。このアップデートは release/9.0-staging ブランチの自動依存関係更新による変更です。

変更内容

  • NuGet.config: NuGet パッケージ設定ファイルを1行削除
  • eng/Version.Details.xml: Cecil ライブラリの依存関係バージョンを更新(4行追加/4行削除)
  • eng/Versions.props: プロパティファイルのバージョン定義を更新(1行追加/1行削除)

更新対象の依存関係:

  • Microsoft.SourceBuild.Intermediate.cecil
  • Microsoft.DotNet.Cecil

パフォーマンスへの影響

影響なし(依存関係の通常メンテナンスアップデート)

関連Issue

なし

その他

  • このPull Requestは dotnet-maestro[bot] による自動更新です
  • アップデート対象:dotnet/cecil の release/9.0 ブランチ
  • Build ID: 20260125.3(2026年1月26日 UTC)
  • 詳細な変更内容は GitHub 比較 で確認可能です

#123478 Add OpenStandardInputHandle, OpenStandardOutputHandle, and OpenStandardErrorHandle APIs

  • 作成者: @Copilot
  • 作成日時: 2026年01月22日 08:17:05(UTC)
  • マージ日時: 2026年02月04日 19:31:27(UTC)
  • ラベル: area-System.IO

概要

OpenStandardInputHandleOpenStandardOutputHandleOpenStandardErrorHandle の3つの新しい公開API を System.Console に追加するPRです。これらのAPIは、標準入力・出力・エラーストリームの基盤となるOSハンドル(SafeFileHandle)を取得するための機能を提供します。

// 使用例
SafeFileHandle inputHandle = Console.OpenStandardInputHandle();
SafeFileHandle outputHandle = Console.OpenStandardOutputHandle();
SafeFileHandle errorHandle = Console.OpenStandardErrorHandle();

変更内容

新しい公開API追加:

  • src/libraries/System.Console/ref/System.Console.cs: 3つのメソッド署名を追加
  • src/libraries/System.Console/src/System/Console.cs: 3つのAPIの実装を追加(47行)

プラットフォーム固有の実装:

  • ConsolePal.Windows.cs: Windows実装(SafeFileHandleを返す)
  • ConsolePal.Unix.cs: Unix実装(ファイルディスクリプタをSafeFileHandleでラップ)
  • ConsolePal.Browser.cs, ConsolePal.Wasi.cs, ConsolePal.Android.cs, ConsolePal.iOS.cs: 各プラットフォーム固有実装

クリーンアップ:

  • Interop.Dup.cs の参照を削除(System.Console.csprojから)
  • Interop.FileDescriptors.cs の不要なコード削除(23行)
  • Interop.IsATty.cs の軽微な更新

テスト追加:

  • src/libraries/System.Console/tests/ConsoleHandles.cs: 新しいAPI用のテストスイート(110行)

パフォーマンスへの影響

影響なし。これらはAPIの取得操作であり、パフォーマンスクリティカルなコードではありません。ハンドルの取得自体は軽量な操作です。

関連Issue

#123478

その他

  • 複数のプラットフォーム(Windows、Unix、Browser、Wasi、Android、iOS)をサポート
  • レビュープロセスが充実しており、jkotas、adamsitnik など複数のメインテナーによる確認がなされています
  • 不要な依存関係(Interop.Dup.cs)の削除により、コードベースの整理も実施

#123468 [release/9.0-staging] Update dependencies from dotnet/runtime-assets

  • 作成者: @dotnet-maestro[bot]
  • 作成日時: 2026年01月22日 02:01:49(UTC)
  • マージ日時: 2026年02月04日 23:59:28(UTC)
  • ラベル: Servicing-approved area-codeflow

概要

dotnet/runtime-assets リポジトリから依存関係を更新するPull Requestです。複数のテストデータおよびランタイム関連NuGetパッケージを beta.26059.3 から beta.26071.2 へアップグレードしています。.NET 9.0 release/9.0-staging ブランチへの定期的な依存関係同期です。

変更内容

  • eng/Version.Details.xml: 28行の依存関係バージョン定義を更新
  • eng/Versions.props: 14行のバージョンプロパティを更新
  • NuGet.config: 設定ファイルの軽微な修正

更新対象パッケージ(14個):

  • Microsoft.DotNet.CilStrip.Sources
  • System.ComponentModel.TypeConverter.TestData
  • System.Data.Common.TestData
  • System.Drawing.Common.TestData
  • System.Formats.Tar.TestData
  • System.IO.Compression.TestData
  • System.IO.Packaging.TestData
  • System.Net.TestData
  • System.Private.Runtime.UnicodeData
  • System.Runtime.Numerics.TestData
  • System.Runtime.TimeZoneData
  • System.Security.Cryptography.X509Certificates.TestData
  • System.Text.RegularExpressions.TestData
  • System.Windows.Extensions.TestData

パフォーマンスへの影響

影響なし

(テストデータおよびランタイムアセットの更新であり、直接的なパフォーマンス改善・低下は報告されていません)

関連Issue

なし

その他

  • 自動化ツール(dotnet-maestro[bot])による依存関係の自動更新
  • build ID: 2884240、commit: 45c55b97e4006bac84d19a382ace44ef3dcb8d94
  • 本番日時: 2026年1月21日 UTC
  • 更新内容の詳細: runtime-assets リポジトリ比較

#123273 [clr-interp] Convert call stub logging to LOG2 facility

  • 作成者: @Copilot
  • 作成日時: 2026年01月16日 18:45:17(UTC)
  • マージ日時: 2026年02月04日 04:16:00(UTC)
  • ラベル: area-CodeGen-Interpreter-coreclr

概要

インタープリタコールスタブのログ出力を、コンパイル時の#if LOG_COMPUTE_CALL_STUBディレクティブからランタイム制御可能なLOG2ファシリティに変換しました。これにより、再コンパイルなしにデバッグ時のログを有効化できるようになります。環境変数DOTNET_LogFacility2=0x2 DOTNET_LogLevel=10000で制御可能です。

変更内容

ファイル 変更内容
src/coreclr/inc/log.h LogFacility2列挙型にLF2_INTERPRETER = 0x00000002を追加
src/coreclr/vm/callstubgenerator.cpp LOG_COMPUTE_CALL_STUBプリプロセッサ定義を削除し、26個のログステートメントを#ifブロックからLOG2((LF2_INTERPRETER, LL_INFO10000, ...))呼び出しに変換;INVOKE_FUNCTION_PTRおよびRETURN_TYPE_HANDLERマクロも更新

変更前後の例:

// C++コード例
// 変更前
#if LOG_COMPUTE_CALL_STUB
    printf("GetGPRegRangeRoutine %d %d\n", r1, r2);
#endif

// 変更後
LOG2((LF2_INTERPRETER, LL_INFO10000, "GetGPRegRangeRoutine %d %d\n", r1, r2));

パフォーマンスへの影響

影響なし。ログレベルが有効化されていない場合、LOG2マクロはほぼオーバーヘッドなしに処理されます。コンパイル時の条件付きログブロックからランタイム制御に移行することで、デバッグ柔軟性が向上し、パフォーマンス特性は変わりません。

関連Issue

Issue #123272

その他

本変更はIssue #123142のディスカッション(@davidwrighton)に基づき、継続的に利用価値のあるこれらのログステートメントを、より利便性の高い形式に統一したものです。


目次