Pull Request on 2026年08月02日

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

注意点

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



#131718 [cDAC] bug fix in DacDbi GetModulePath

  • 作成者: @rcj1
  • 作成日時: 2026年08月02日 20:08:49(UTC)
  • マージ日時: 2026年08月02日 23:04:50(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Debugger Access Component)のGetModulePath APIを修正し、ディスク上に実際に存在するファイルパスのみを返すようにしました。メモリ内モジュールやダイナミックモジュール(LoaderがPath情報を返さない場合)について、FileName フォールバックを削除し、適切に"パスなし"を報告するようにします。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Dbi/DacDbiImpl.cs
    • GetModulePathメソッドで、loader.GetPath(handle)が空文字列を返した場合にloader.GetFileName(handle)にフォールバックしていた処理を削除
    • 空のPathを持つモジュール(メモリ内/動的モジュール)の場合、pResult = FALSEを返すように変更

パフォーマンスへの影響

影響なし

関連Issue

#131718

その他

  • この変更はDacDbiレイヤー(内部診断インターフェース)の仕様変更です
  • ファイルパスが存在しないモジュール(Path=空、FileName≠空)については、これまでFilenameを代替として返していましたが、今後は明確に"パスなし"として報告されます
  • Copilotから、空Path + 非空Filenameのモジュールケースをカバーするユニットテスト追加の提案がありますが、本PR内では実装されていません

#131717 [cDAC] Fix bug in EnumerateInstantiationFields

  • 作成者: @rcj1
  • 作成日時: 2026年08月02日 19:36:13(UTC)
  • マージ日時: 2026年08月02日 22:03:27(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Common Data Access Component)の診断機能でのバグを修正しました。EnumerateInstantiationFieldsメソッドにおいて、approximate TypeHandleがnullの場合に例外を投げるように修正し、ネイティブ実装のDacDbiInterfaceImpl::GetTypeHandlesのセマンティクスに合わせています。

変更内容

  • src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/Dbi/DacDbiImpl.cs
    • vmThApprox == 0の場合にCORDBG_E_CLASS_NOT_LOADED例外を投げるよう修正
    • vmThExact == 0を「exact handleが存在しない」として扱い、nullを管理実装に流す
    • CollectFieldsForDbiメソッドをnullable exact handleを受け入れるように更新し、collectible/static-baseロジックをガード処理

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

内部診断テスト中に発見されたバグです。本修正により、ネイティブ実装との一貫性が確保されます。


#131714 Avoid inlining Random.InternalSample

概要

Random.InternalSample()メソッドに[MethodImpl(MethodImplOptions.NoInlining)]属性を追加し、メソッドのインライン化を抑止する変更です。このメソッドは予測不可能な分岐を含んでおり、ループ内でインライン化されるとif変換が行われずパフォーマンスが低下するため、スタンドアロンメソッドとして保持することを意図しています。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Random.CompatImpl.cs
    • CompatPrng.InternalSample()メソッドに[MethodImpl(MethodImplOptions.NoInlining)]属性を追加
    • インライン化を避ける理由を説明するコメントを追加

パフォーマンスへの影響

改善あり。ホットループ内でのメソッド呼び出し時に以下の改善が期待できます:

  • メソッドをインライン化しないことで、JITコンパイラがif変換を適用可能
  • if変換により、分岐予測が困難な条件分岐が消去され、実行速度が向上
  • 特にランダム値生成が頻繁に呼び出されるループシナリオで効果的

関連Issue

#117787 #130359

その他

  • 変更はランタイムライブラリの内部実装(System.Randomの互換PRNG)に限定
  • 公開APIレベルでは互換性に影響なし
  • 将来的にJITのif変換がループ内での制約から解放された場合は、この属性の再検討が可能

#131712 [cDAC] Fix bug in static address calculation

  • 作成者: @rcj1
  • 作成日時: 2026年08月02日 15:00:37(UTC)
  • マージ日時: 2026年08月02日 18:06:09(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Compact Diagnostic Data Contract)における静的アドレス計算のバグ修正。RVAフィールドの静的アドレスが TargetPointer.Null にデフォルト設定されていた問題を修正し、正しく計算されるようにしました。内部テスト中に発見された問題です。

変更内容

Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/RuntimeTypeSystem_1.cs

  • RVAフィールドの静的アドレス計算ロジックを修正
  • 変更行数: +24/-21(合計45行)
  • 静的アドレスが適切に計算されるように調整

パフォーマンスへの影響

影響なし(バグ修正のため、パフォーマンス上の変化は想定されません)

関連Issue

なし

その他

  • この修正はランタイム診断機能(cDAC)の内部実装に関連しています
  • RVA(Relative Virtual Address)フィールドの静的アドレス取得の信頼性が向上します

#131704 Remove temporary array allocations in ComVariant.As.

概要

ComVariant.As<T>()メソッド内の型チェック関数ThrowIfNotVarTypeを改善し、毎呼び出しで発生していた一時的な配列割り当てを削除しました。params VarEnum[]からparams ReadOnlySpan<VarEnum>に変更することで、RVAフィールドへの割り当てフリーな参照として最適化されるようになります。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshalling/ComVariant.cs
    • ThrowIfNotVarTypeユーティリティ関数のシグネチャをparams VarEnum[]からparams ReadOnlySpan<VarEnum>に変更
    • Array.IndexOf(...)からReadOnlySpan<T>.Contains(...)に置き換え(例外スロー時のみToArray()でスパンを具体化)
    • 例外発生時の動作は変わらず、エラーメッセージ生成時のみ配列化

パフォーマンスへの影響

改善あり - ComVariant.As<T>()の呼び出し時に毎回発生していた一時的な配列割り当てが削除されます。特に高頻度で呼び出されるシナリオでは、メモリ割り当て圧力とGC負荷が軽減されます。例外経路(エラーケース)ではToArray()による小規模な割り当てが発生しますが、これは例外スロー時の限定的なパスのため全体的なパフォーマンスへの影響は最小限です。

関連Issue

#131704

その他

この変更はCOM相互運用機能(System.Runtime.InteropServices.Marshalling)における内部実装の最適化で、パブリックAPIには影響しません。正常系での割り当てフリー化と例外経路の適切な処理により、パフォーマンスと可用性のバランスが取れた改善となっています。


#131697 Revert "Retarget cdac projects to NetCoreAppMinimum (net10)"

概要

PR #131551で実施されたcDAC(Compact Diagnostic Access Component)管理プロジェクトの$(NetCoreAppMinimum)へのリターゲティングを取り消し、$(NetCoreAppToolCurrent)に戻すリバート変更です。関連Issue #131680に対応しています。

変更内容

  • cDAC主要ライブラリ: Microsoft.Diagnostics.DataContractReader、Legacy、Abstractions、Contractsプロジェクトのターゲットフレームワークを$(NetCoreAppToolCurrent)に戻す
  • NativeAOT関連プロジェクト: mscordaccore_universalのTFMを戻す
  • スクリプト/ツール: cdac-dump-inspectスクリプトツールのTFMを戻す
  • テストプロジェクト: UnitTests、TestInfrastructure、StressTests、DumpTests、DataGenerator各テストプロジェクトのTFMを戻す
  • RollForward設定削除: テストプロジェクト(StressTests、DumpTests、DataGenerator)のRollForward=LatestMajor設定を削除

パフォーマンスへの影響

影響なし

関連Issue

#131680, #131551(当該PRでリバート対象)

その他

  • 11個のプロジェクトファイル(.csproj)が変更対象
  • UnitTestsプロジェクトではBOM付きの形式変更も含まれている

#131585 Flush after each live enumerable write in SSE & JSON

  • 作成者: @MihaZupan
  • 作成日時: 2026年07月30日 12:56:18(UTC)
  • マージ日時: 2026年08月02日 07:02:48(UTC)
  • ラベル: area-System.Net

概要

非同期列挙可能のStreamへのシリアライズ時に、各要素/イベント出力後に明示的にFlushを実行することで、IISのようなバッファリング層を挟んでも"live"な出力が消費側から即座に観測可能になるようにします。KestrelやNetworkStreamは自動Flushするため問題ありませんが、バッファリングを行う実装に対応する必要があります。

変更内容

  • System.Text.Json: JSON Lines形式での非同期列挙シリアライズで、各値書き込み後にFlushAsyncを呼び出す
  • System.Net.ServerSentEvents: 各SSEイベント書き込み後に宛先StreamをFlushし、ドキュメントにもその動作を記載
  • PooledByteBufferWriter: PipeWriter.FlushAsyncで基底のStreamもFlushするよう修正
  • テスト: 非同期列挙ストリーミングのFlushタイミング検証テストを追加し、テストヘルパーのパラメータ名を改善

パフォーマンスへの影響

懸念事項あり: PooledByteBufferWriter.FlushAsyncがすべてのFlushでStream.FlushAsyncを呼び出すようになったため、バッファリングしきい値ベースのFlushも含め、非ストリーミングペイロードに対して余分なFlush syscallが増加する可能性があります。

関連Issue

#121003

その他

Copilotレビューで3件の低信頼度コメントが抽出されました:

  1. FlushTrackingStream.OnFlushの非nullable宣言と実装の不一致
  2. テストの30秒WaitAsyncタイムアウトがCI失敗時に遅延を招く可能性
  3. Stream Flush呼び出しの適用範囲をストリーミングケースに限定するか検討が推奨されています

#131233 Clean-up Windows interop code and project files.

概要

Windows interop関連のクリーンアップPRです。#125193で不要になったファイルの削除、プロジェクトファイルのLink メタデータ修正によるSolution Explorer内の重複Interopフォルダ表示の解決、および隣接する同一ConditionのItemGroupの統合を実施しています。

変更内容

  • 削除されたファイル: Windows固有のLowLevelMonitor実装(LowLevelMonitor.Windows.cs)、Kernel32 interop定義(Interop.CriticalSection.cs、Interop.ConditionVariable.cs)、ThreadPoolBoundHandle関連の不要ファイル
  • Link メタデータ修正: System.Private.CoreLib.Shared.projitemsおよびNativeAOT System.Private.CoreLib.csprojで、Windows interop ファイルのLinkパスをCommon\Interop\...形式に統一
  • ItemGroup統合: NativeAOT System.Private.CoreLib.csprojで、同一Conditionを持つ隣接ItemGroupを折り畳み

パフォーマンスへの影響

影響なし

関連Issue

#125193

その他

このPRは主にプロジェクトファイルの メタデータ修正とデッドコード削除であり、ランタイム動作やAPIに影響しません。Solution Explorerの表示改善により、開発体験が向上します。


目次