Pull Request on 2026年05月09日

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

注意点

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



#127979 Fix EncodeUnsignedInteger for test DSA signer

概要

X509 CRLビルダーのDSA署名テストにおいて、手書きのASN.1エンコーディングを廃止し、フレームワークの標準APIを使用するよう改善したPRです。EncodeUnsignedIntegerのバグ(先頭ゼロと高ビットが設定されたバイトがある場合のエンコーディング不正)を修正し、代わりにAsnWriterとDSASignatureFormat.Rfc3279DerSequenceを活用することで、Android環境でのテスト失敗率(~0.46%)を排除します。

変更内容

  • DSAX509SignatureGenerator.cs: 手書きのASN.1エンコーディングロジック(21行追加、115行削除)をAsnWriterとBigInteger、DSASignatureFormat.Rfc3279DerSequenceに置き換え。DSA署名フォーマットの自動変換により、IEEE形式からDER形式への手動変換が不要に。
  • CrlBuilderTests.cs: Android環境用のActiveIssue属性を削除し、テストを常時実行可能に。

パフォーマンスへの影響

影響なし(テストコードの改善であり、ランタイムパフォーマンスへの直接的な影響はありません)

関連Issue

#119023

その他

  • この変更はテスト用のDSA署名生成器(DSAX509SignatureGenerator)に限定された修正です。
  • AsnWriterとフレームワークの標準ASN.1エンコーディング機能を活用することで、保守性と正確性が向上します。
  • Conscryptライブラリの厳格なASN.1エンコーディング検証に対応するための修正です。

#127974 [release/10.0] Optimize Directory.GetFiles by passing safe patterns to NtQueryDirectoryFile

概要

Directory.GetFilesなどのディレクトリ列挙API(Windows版)を最適化し、ワイルドカードパターンをNtQueryDirectoryFileに直接渡すことで、マネージド側でのフィルタリング処理を削減します。大規模ディレクトリで選別的なパターンマッチを行う場合、例えば140,000ファイルから"A14881*.jpg"に該当する4ファイルを検索する際、従来は全ファイル列挙が必要でしたが、この変更により4~10エントリのみの処理に削減されます。

変更内容

  • FileSystemEnumerator.Windows.cs: NtQueryDirectoryFileの最初のクエリでフィルター式をFileNameパラメータとして渡すための実装(+88行)
  • FileSystemName.cs: ワイルドカード・エスケープ文字の処理を一元化するEscapeExpressionヘルパーメソッドを追加(+30行)
  • FileSystemEnumerableFactory.cs: EscapeExpressionを使用し、式をFileSystemEnumerableにスレッド化(+17行/-14行)
  • FileSystemEnumerable.cs: 式を保存し、列挙子に渡す機能を追加(+4行/-2行)
  • FileSystemEnumerator.Unix.cs: API統一のためコンストラクタオーバーロードを追加(+13行)
  • テストファイル群: SpecialDirectoryTests.cs、MatchTypesTests.cs、MatchCasingTests.csを拡張し、特殊ディレクトリ、マッチタイプセマンティクス、大文字小文字処理などの網羅的なテストカバレッジを追加(+1,068行)
  • Interop.NtStatus.cs: 新しいWindows処理で使用されるNTSTATUS定数を追加(+1行)

パフォーマンスへの影響

  • 大幅な改善: 選別的パターンで大規模ディレクトリを検索する場合、列挙対象をO(n)からO(m)に削減(n=ディレクトリ内全ファイル数、m=マッチファイル数)
  • 具体例: 140,000ファイルのディレクトリで4マッチの場合、全140,000ファイル列挙から4~10エントリ処理に削減
  • ユーザーランド側での排他的フィルタリングは引き続き実施され、正確性を担保

関連Issue

#122947、#123695のmainブランチでのマージをベースとしたrelease/10.0へのバックポート

その他

  • 互換性: 公開APIDirectory.GetFilesの動作に破壊的変更なし、内部実装の最適化
  • リスク: 低(メインブランチでの広範なレビュー・検証済み、.NET 11での運用実績あり)
  • 顧客向けメリット: .NET Frameworkから.NETへの移行時に経験した性能低下がPowerShellなどのユーティリティでの実利用を通じて改善される

#127972 Cleanup VisitOperandUses and GenTreeVisitor to check common kinds rather than be a big switch

概要

JITコンパイラのVisitOperandUsesとGenTreeVisitorをリファクタリングし、大規模なswitch文をオペランドの種類(リーフ/単項/二項/特殊)の高速チェックに置き換えました。これによりGT_LZCNTなど以前処理されていなかったノードの処理漏れが解決され、新しいノード種が導入される際の堅牢性が向上します。

変更内容

  • src/coreclr/jit/compiler.h:オペランド種別チェック用の高速パス判定(OperIsLeaf()/OperIsBinary()/OperIsUnary())を導入し、ほとんどのノードはAsOp()/AsUnOp()経由で一元的に処理
  • src/coreclr/jit/compiler.hpp:VisitOperandUsesをリファクタリング。特殊構造ノード(呼び出し引数、PHI使用、フィールドリスト、cmpxchg、配列要素など)のみ個別のswitch文で処理
  • 大規模なOperGet()switchを小規模なGTK_SPECIAL用switchに縮小

パフォーマンスへの影響

改善結果:

  • Linux arm64:Overall -0.21~-0.15%、FullOpts -0.26~-0.16%
  • Linux x64:Overall -0.23~-0.15%、FullOpts -0.28~-0.15%
  • OSX arm64:Overall -0.21~-0.16%、FullOpts -0.22~-0.16%
  • Windows arm64:Overall -0.21~-0.15%、FullOpts -0.27~-0.16%
  • Windows x64:Overall -0.23~-0.15%、FullOpts -0.29~-0.15%

回帰: Windows x86 MinOptsで-0.00~+0.06%の軽微な低下。全体的な改善と堅牢性向上により許容範囲内。

関連Issue

なし

その他

Copilotによる指摘として、ARM64条件付きノード(GT_SELECT_INC/GT_SELECT_INV/GT_SELECT_NEG)がoperand walkingで処理されていない可能性が報告されており、これらのノードのgtOp2(存在時)も訪問する必要がある点に注意が必要です。


#127924 Implement X25519DiffieHellmanCng

  • 作成者: @vcsjones
  • 作成日時: 2026年05月07日 16:32:36(UTC)
  • マージ日時: 2026年05月09日 15:08:10(UTC)
  • ラベル: area-System.Security

概要

Windows環境でCNG(Cryptography Next Generation)キープロバイダと相互運用するためのX25519DiffieHellmanCng実装を追加します。Curve25519/CNG blob処理の共有ロジックをX25519WindowsHelpersとして抽出し、コード重複を削減しながらCNGベースの楕円曲線暗号操作を実現します。

変更内容

  • 新規公開API: X25519DiffieHellmanCngクラスをWindows環境で提供、非Windows環境ではPlatformNotSupportedExceptionをスロー
  • 共有ヘルパー: X25519WindowsHelpersを新規作成し、公開鍵リダクション、CNGブロブ生成/エクスポート、スカラー修正ロジックを統一
  • 既存コードの再構成: X25519DiffieHellmanImplementation.Windows.csを184行削減し、X25519WindowsHelpersを活用するように リファクタリング
  • P/Invoke拡張: NCryptのDeriveKeyMaterialとExportKeyにSpanベース、割り当て不要なオーバーロードを追加
  • KeyFormatHelper拡張: 状態をサポートするステートフルKeyReaderデリゲートを追加し、PKCS#8リーダーへの状態伝播に対応
  • ECCng.ImportExport: ImportKeyBlobにオプションflagsパラメータを追加してインポートフラグをサポート
  • テスト充実: CNGベーシックテスト(X25519DiffieHellmanCngTests.cs)を新規追加、基本テストにCanRoundTripKeysフラグを導入してプラットフォーム依存の挙動を吸収

パフォーマンスへの影響

割り当て不要なSpanベースのP/Invokeオーバーロード追加により、メモリアロケーション削減が期待できます。既存BCrypt実装はヘルパーロジック共有化により可読性向上と保守性改善が見込まれますが、性能面への直接的な変動なし。

関連Issue

#126206

その他

  • CNG実装はWindows専用(X25519DiffieHellmanCng.Windows.cs)
  • 非Windows環境向けスタブはCng.NotSupported.csに集約
  • テストで"クランプされていない"秘密鍵のラウンドトリップ能力をプラットフォーム別に判定する機構を導入

#127905 [browser][coreCLR] reduce initial memory footprint

概要

ブラウザ環境でのWebAssembly(WASM)実行時における初期メモリフットプリントを削減するための変更です。CoreCLRランタイムのビルド設定とネイティブホストの構成を最適化しています。

変更内容

  • src/mono/browser/build/BrowserWasmApp.CoreCLR.targets: CoreCLRベースのブラウザWASMアプリケーションビルド設定の調整(2行追加/2行削除)
  • src/native/corehost/browserhost/CMakeLists.txt: ブラウザホストのCMakeビルド設定の最適化(2行追加/2行削除)

パフォーマンスへの影響

メモリフットプリントの削減(具体的な削減量の詳細は提供情報に記載されていません)

関連Issue

#127880

その他

なし


#127886 perf: reuse counter snapshot buffer in CounterGroup.OnTimer

概要

CounterGroup.OnTimerメソッドでの毎回のポーリング時に新規割り当てされていたDiagnosticCounter[]スナップショットバッファの再利用を実装しました。カウンターセットはEventSource構築時に固定されることが多いため、インスタンス毎のバッファを再利用し、必要に応じて動的に拡張し、破棄されたカウンターのスロットをクリアします。

変更内容

  • src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/CounterGroup.cs
    • OnTimerメソッドで毎回新規割り当てされていたDiagnosticCounter[]スナップショットの再利用を実装
    • インスタンス毎のカウンターバッファをキャッシュ化
    • バッファは必要に応じて動的に拡張される(grow on demand)
    • 破棄されたカウンターに対応するトレーリングスロットのクリア処理を追加

パフォーマンスへの影響

メモリ割り当て削減: ポーリング時の毎回のメモリ割り当てが廃止されます。カウンター監視がアクティブな場合、OnTimer呼び出し頻度に応じた継続的なGC圧力が軽減されます。

関連Issue

なし

その他

なし


#127877 [cDAC] implement DacDbi GetTypeLayout/GetArrayLayout

  • 作成者: @Copilot
  • 作成日時: 2026年05月06日 17:48:40(UTC)
  • マージ日時: 2026年05月09日 15:34:56(UTC)
  • ラベル: area-Diagnostics-cdac

概要

cDAC(Component Data Access Contract)側の DacDbi 型/配列レイアウト API を実装し、このために必要な RuntimeTypeSystem 分類 API を追加しました。具体的には IsObjRef() および GetInternalCorElementType() メソッドの実装を含みます。

変更内容

  • RuntimeTypeSystem 設計ドキュメント: RuntimeTypeSystem に関する設計情報を追加(22行)
  • cDAC マネージド実装:
    • IRuntimeTypeSystem.cs: IsObjRef と GetInternalCorElementType インターフェース定義を追加
    • RuntimeTypeSystem_1.cs: 上記メソッドの実装を追加(19行)
    • DacDbiImpl.cs: GetTypeLayout および GetArrayLayout の実装を大幅拡張(128行追加)
    • IDacDbiInterface.cs: 関連インターフェース定義を追加(16行追加)
  • ネイティブ実装の更新:
    • dacdbiimpl.cpp/h: メソッドシグネチャの軽微な修正
    • dacdbiinterface.h: インターフェース定義の更新
    • dacdbi.idl: IDL ファイルの更新
    • process.cpp: 呼び出し側の軽微な修正
  • テスト追加:
    • DacDbiObjectDumpTests.cs: DacDbi オブジェクトダンプテスト(75行)
    • RuntimeTypeSystemDumpTests.cs: RuntimeTypeSystem ダンプテスト(26行)
    • MethodTableTests.cs: MethodTable テスト(55行)
    • MockDescriptors.RuntimeTypeSystem.cs: モック実装追加(12行)

パフォーマンスへの影響

影響なし

関連Issue

なし

その他

このPRはデバッグ情報アクセスの基盤整備であり、型とその配列のメモリレイアウト情報をデバッガが適切に取得できるようにするための実装です。ネイティブ側とマネージド側(cDAC)の両方で対応する変更が含まれます。


#127684 JIT: remove MorphAddrContext

  • 作成者: @EgorBo
  • 作成日時: 2026年05月02日 16:52:55(UTC)
  • マージ日時: 2026年05月09日 04:56:09(UTC)
  • ラベル: area-CodeGen-coreclr

概要

JIT morphing処理のMorphAddrContextスレッドスルーハックを削除し、未morphification状態のアドレスツリーに対するfgMarkAddrModeForFieldAddrプリウォークで置き換えました。新たにGTF_FLD_TGT_NONFAULTINGフラグを導入し、null-check省略判定を明示的に処理することでコード生成の意図を一層明確にします。

変更内容

  • compiler.h: MorphAddrContextの宣言を削除、morphヘルパー関数のシグネチャを更新(-16行)
  • gentree.h: GT_FIELD_ADDRフラグ定義を追加(新規フラグ)
  • morph.cpp: fgMarkAddrModeForFieldAddrプリウォークを追加し、fgMorphTree/fgMorphSmpOp/fgMorphFieldAddr/fgMorphExpandInstanceFieldの処理を更新。定数オフセットと連鎖インスタンスFIELD_ADDRを削ぎ落とし、各elidableFIELD_ADDRにGTF_FLD_TGT_NONFAULTINGフラグを設定(+100行、-58行)

パフォーマンスへの影響

SPMI asmdiffsで測定可能な差分なし。

関連Issue

なし

その他

この変更はJIT内部実装の最適化であり、公開APIへの影響はありません。プリウォーク方式への移行により、null-check省略判定の流れが明確化され、保守性が向上します。


#127319 Support typeof(T).Assembly.GetType(string) in ILLink dataflow analysis

概要

ILLink trimmerおよびNativeAOT compiler、Roslyn analyzerにtypeof(T).Assembly.GetType(string)パターンの理解を追加しました。このパターンを解析することで、対象型を解決でき、偽の警告を回避できます。特にライブラリテストで一般的なパターンです。

新たにAssemblyValueを導入し、Type.AssemblyとAssembly.GetType(...)を内部関数として扱い、型の具体的な解決が可能になります。

変更内容

  • AssemblyValue追加: 既知のアセンブリ(単純名)を保持する新しいSingleValue型
  • 内部関数ID追加: IntrinsicId.Type_get_AssemblyとIntrinsicId.Assembly_GetType
  • Type.Assemblyハンドリング: SystemTypeValue → AssemblyValueへの変換
  • Assembly.GetTypeハンドリング: 既知アセンブリ内での型名解決
  • 3つの実装全体での部分実装: ILLinker、NativeAOT、Roslyn analyzerそれぞれに対応
  • テストカバレッジ: AssemblyGetTypeDataFlow.csで既知/未知パターンとignoreCase動作をテスト
  • 共有ユーティリティ改善: TypeNameResolverにメタデータ名解決機能を追加

パフォーマンスへの影響

影響なし

関連Issue

#127319

その他

このPRは将来的にlinker #1947の実装に活用できる基盤を提供しています。


目次