注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
- #123108 Add X509Certificate2PemTests to CredScanSuppressions
- #123086 Simplify Enum.Equals/GetHashCode optimization
- #123082 [release/10.0] Update dependencies from dotnet/xharness
- #123075 Fix another Uri debug assert
- #123063 Remove unused SORT_MARK_STACK code.
- #123043 Only root supported hwintrinsic methods for interpreter-based platforms
- #123016 Remove all current uses of PInvokeArgIterator and the flow of native stack arg sizes through our data structures where possible
- #123014 Don't overwrite the prebuilt usage tracking file for the bootstrap build
- #122990 [release/10] Bump MacOS helix queues to latest
- [#122980 browser][coreCLR] enable System.Runtime.Tests on CI as Release build
- #122952 Optimize HashSet.UnionWith to copy data from another HashSet when empty
- #122835 Fix StackOverflowException serializing dictionary with string key and object-converter that handles string
- #122744 Fix build compilation with OpenSSL 4.0-dev.
- #122729 Fix missing Dispose override in SizeOptIListSelectIterator and SizeOptIListWhereIterator
- #122715 Update comment to use
Ascii.IsValidinKeyAnalyzer - #122554 [release/10.0] Source code updates from dotnet/dotnet
- #122423 [release/8.0] Move default build images to macos 15 (and xcode 16) (#120589)
- #122038 Split non-ASCII Uri normalization out of ParseRemaining and avoid temporary allocations
- #122032 Add ZipArchiveEntry.Open(FileAccess) and OpenAsync(FileAccess, CancellationToken) overloads to ZipArchiveEntry
- #120949 Split NativeAOT tests to use separate merged runners
#123108 Add X509Certificate2PemTests to CredScanSuppressions
- 作成者: @hoyosjs
- 作成日時: 2026年01月12日 23:06:27(UTC)
- マージ日時: 2026年01月12日 23:23:53(UTC)
- ラベル: area-Infrastructure
概要
X509Certificate2PemTests に関連するテスト項目をCredScanSuppressions.jsonの除外リストに追加するPull Requestです。セキュリティスキャンツール(CredScan)の誤検知を抑制するための設定変更です。
変更内容
.config/CredScanSuppressions.json: X509Certificate2PemTests に関する除外ルール(2行追加、1行削除)
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
CredScanはMicrosoftのセキュリティスキャンツールであり、この変更は X509Certificate2 のPEM形式テストにおいて、スキャンツールが認証情報として誤認識する可能性のあるテストデータを除外する設定と考えられます。テスト自体の動作やランタイムのセキュリティには影響を与えません。
#123086 Simplify Enum.Equals/GetHashCode optimization
- 作成者: @MichalStrehovsky
- 作成日時: 2026年01月12日 12:47:24(UTC)
- マージ日時: 2026年01月12日 20:59:28(UTC)
- ラベル: area-NativeAOT-coreclr
概要
このPRは、Enum.Equals/GetHashCode の最適化実装を簡潔にするものです。RyuJIT が Equals の最適化を実装したため(PR #122779)、カスタム IL サンク生成を削除し、CoreCLR VM と同じアプローチを採用しています。GetHashCode 最適化は constrained call 解決時に enum 型を基になる型に置き換えることで実現されます。
変更内容
- EnumThunks.cs / EnumThunks.Sorting.cs: 削除(合計 250 行)- カスタム IL サンク生成が不要に
- CompilerTypeSystemContext.EnumMethods.cs: 削除(103 行)- enum メソッド解決ロジックが不要に
- CorInfoImpl.RyuJit.cs: Enum GetHashCode 最適化を簡潔化(+10/-6 行)
- ILImporter.Scanner.cs: IL スキャナーに GetHashCode 最適化を追加(+10/-5 行)
- ILCompiler.Compiler.csproj: 削除ファイルへの参照を削除
パフォーマンスへの影響
影響なし。RyuJIT の Equals 最適化と simplified GetHashCode 最適化により、従来と同等以上のパフォーマンスを期待。実装の簡潔化により、メンテナンスコストと JIT コンパイル時間の削減が期待できます。
関連Issue
PR #122779(RyuJIT での Enum.Equals 最適化実装)
その他
このPRは corrt/PR #2117 の revert と coreclr/PR #7895 の port に該当します。AOT コンパイラ(ILCompiler)の enum サポートを簡潔化する変更で、ランタイムの内部実装に限定された変更です。公開APIの変更はありません。
#123082 [release/10.0] Update dependencies from dotnet/xharness
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2026年01月12日 08:36:40(UTC)
- マージ日時: 2026年01月12日 12:08:46(UTC)
- ラベル: Servicing-approved area-codeflow
概要
dotnet/xharnessの依存関係を更新するマイナーバージョンアップです。XHarness関連の3つのNuGetパッケージを10.0.0-prerelease.25622.2から11.0.0-prerelease.26058.2にアップグレードしました。これはテストランナーとCLIツールの機能強化やバグ修正を含む更新です。
変更内容
- .config/dotnet-tools.json: dotnet toolsの構成ファイルを更新
- eng/Version.Details.props: バージョン情報プロパティを更新(Microsoft.DotNet.XHarness.CLI、Microsoft.DotNet.XHarness.TestRunners.Common、Microsoft.DotNet.XHarness.TestRunners.Xunitの3パッケージ)
- eng/Version.Details.xml: 詳細なバージョン履歴情報を更新
パフォーマンスへの影響
影響なし
関連Issue
なし
その他
- このPRはMaestroの自動依存関係更新システムにより生成されました(dotnet-maestro[bot])
- 対象ブランチはrelease/10.0です
- XHarness v11.0.0-prerelease.26058.2のコミット:799df8d4c86ff50c83b7a57df9e3691eeab813ec(2026年1月8日UTC版)
- マイナーバージョンアップ(10.0.0→11.0.0)であるため、互換性の確認が必要な場合がございます
#123075 Fix another Uri debug assert
- 作成者: @MihaZupan
- 作成日時: 2026年01月11日 16:06:25(UTC)
- マージ日時: 2026年01月12日 08:37:17(UTC)
- ラベル: area-System.Net
概要
Uri の UriFormat.Unescaped コードパスにおいて、空のスパンを処理する際に発生するデバッグアサーション失敗を修正しました。Overlaps メソッドが空のスパンに対して誤った判定を行うため、アサーション条件を修正して空のスパンチェックを追加しました。
変更内容
| ファイル | 変更内容 |
|---|---|
src/libraries/System.Private.Uri/src/System/Uri.cs |
デバッグアサーションを修正し、Overlaps 呼び出し前に空のスパンチェックを追加 (+1/-1) |
src/libraries/System.Private.Uri/tests/FunctionalTests/UriRelativeResolutionTest.cs |
FTP URI の圧縮パスを含む UriFormat.Unescaped コードパスのテストを追加 (+2/-0) |
パフォーマンスへの影響
影響なし。本修正は条件判定の追加のみであり、ランタイムパフォーマンスへの影響はありません。
関連Issue
なし
その他
本修正は、空のスパンに対する Overlaps メソッドの特殊な動作に対応したもの。LocalPath プロパティが UriFormat.Unescaped をサポートする際の境界条件を正しく処理しています。デバッグアサーションの修正のみで、実行時の動作には影響しません。
#123063 Remove unused SORT_MARK_STACK code.
- 作成者: @adityamandaleeka
- 作成日時: 2026年01月10日 03:08:44(UTC)
- マージ日時: 2026年01月12日 21:38:17(UTC)
- ラベル: area-GC-coreclr
概要
.NETランタイムのGC(ガベージコレクション)から、未使用の SORT_MARK_STACK 機能と関連する rqsort1 関数を削除するPRです。このマーク スタック ソート機能は本番ビルドで有効化されておらず、現在はプリフェッチ最適化がマーク フェーズで利用可能となっているため、不要なコードの削除となります。
変更内容
- src/coreclr/gc/gc.cpp:
SORT_MARK_STACKに関連する条件付きコンパイル ブロックを削除(75行削除)rqsort1関数(リバース クイックソート実装)の削除- フォアグラウンド GC マーク フェーズからの
SORT_MARK_STACK条件付きコード削除 - バックグラウンド GC マーク フェーズからの
SORT_MARK_STACK条件付きコード削除
パフォーマンスへの影響
影響なし。むしろ以下の理由から改善につながる可能性があります:
SORT_MARK_STACK機能は有効化されていなかったため、削除によるマイナス影響なし- マーク フェーズのプリフェッチ最適化がすでに実装されており、メモリ遅延隠蔽を効果的に行っているため、ソートコストを払う必要がない
- 不要なコードの削除によるコード ベースの簡潔化
関連Issue
#123063
その他
このコードは将来必要になった場合、Git履歴から復旧可能であり、削除を容易にしています。GC のマーク フェーズ最適化戦略の進化を反映した変更です。
#123043 Only root supported hwintrinsic methods for interpreter-based platforms
- 作成者: @jkoritzinsky
- 作成日時: 2026年01月09日 20:01:10(UTC)
- マージ日時: 2026年01月12日 21:20:37(UTC)
- ラベル: area-crossgen2-coreclr
概要
インタープリタベースのプラットフォーム向けハードウェア組み込み関数のルーティングロジックを最適化するPRです。サポートされている命令セットのみからメソッドをルーティングするよう変更され、システムモジュール内の全ハードウェア組み込み関数型を走査する必要がなくなりました。新しいLookupPlatformIntrinsicTypesヘルパーメソッドを追加し、命令セットから管理型へのマッピングを効率化しています。
変更内容
- InstructionSetDesc.txt: アーキテクチャ定義に管理型名前空間パラメータ(6番目のパラメータ)を追加。RiscV64などの内部専用命令セットから管理型名を削除
- InstructionSetGenerator.cs:
_architectureManagedNamespace辞書を追加し、definearchパラメータパースを6パラメータに対応。LookupPlatformIntrinsicTypesメソッドを生成(ネストされた型と64ビット変種に対応) - CorInfoInstructionSet.cs: 新しい
LookupPlatformIntrinsicTypesメソッドを実装。ArchitectureToValidInstructionSetsから不正なR2R名を削除、X64ケースを追加 - ReadyToRunHardwareIntrinsicRootProvider.cs: システムモジュール全体の型走査から、サポート命令セットの効率的な走査に変更(17行削減)
パフォーマンスへの影響
改善あり: ReadyToRunコンパイラのAOT処理時、ハードウェア組み込み関数のルーティング時にシステムモジュール内の不要な型走査が削減されます。特にサポートされていない命令セット(RiscVなど)が多い場合、処理時間の短縮が期待できます。
関連Issue
なし
その他
このPRは生成コードが大幅に増加(CorInfoInstructionSet.csで+974行)していますが、これは自動生成コードのため保守性への懸念は低いです。RiscV64など内部専用命令セットの明示的な除外により、マネージド型のない命令セットの扱いが改善されています。
#123016 Remove all current uses of PInvokeArgIterator and the flow of native stack arg sizes through our data structures where possible
- 作成者: @davidwrighton
- 作成日時: 2026年01月08日 22:36:31(UTC)
- マージ日時: 2026年01月12日 22:33:39(UTC)
- ラベル: area-VM-coreclr
概要
このPRは、PInvokeArgIteratorを使用した未使用のネイティブスタック引数サイズ計算を削除し、ランタイムコードを簡素化します。デリゲートから関数ポインタを構築する際に、構造体パラメータのマーシャリングに関連する計算を削除することで、Unix X64プラットフォームでのコードサイズ削減と、すべてのWindows以外のプラットフォームでのわずかなパフォーマンス向上を実現します。Windows COM シナリオではPInvokeArgIteratorが引き続き必要なため、そこは未修正です。
変更内容
- src/coreclr/vm/method.hpp:
FEATURE_DYNAMIC_METHOD_HAS_NATIVE_STACK_ARG_SIZEマクロを導入し、TARGET_X86またはFEATURE_COMINTEROPの場合のみ有効化。DynamicMethodDescおよびPInvokeMethodDescのネイティブスタック引数サイズ関連メソッドを条件付きコンパイル - src/coreclr/vm/method.cpp:
SizeOfNativeArgStack()実装を新しいマクロでガード - src/coreclr/vm/dllimport.cpp: SetNativeStackArgSize呼び出しとスタックサイズ計算を適切なマクロでガード
- src/coreclr/vm/comdelegate.cpp: InitStackArgumentSize呼び出しをTARGET_X86でガード
- src/coreclr/vm/clrtocomcall.cpp: InitStackArgumentSize呼び出しをTARGET_X86でガード
パフォーマンスへの影響
改善点:
- Unix X64プラットフォームでコードサイズが削減される
- すべてのWindows以外のプラットフォームでわずかなパフォーマンス向上が期待される(未使用計算の除去により)
懸念点: 特になし。本変更は計算していながら使用していなかったコード経路を削除するため、機能的な影響はありません。
関連Issue
#123016
その他
- PInvokeArgIterator自体は削除されていません。インタプリタコールスタブジェネレータで必要とされているためです(ただし、そのケースでも正確性の修正が必要とされています)
- Windows COM相互運用シナリオではネイティブスタック引数サイズ追跡が引き続き必要であり、
FEATURE_DYNAMIC_METHOD_HAS_NATIVE_STACK_ARG_SIZEマクロによって条件付きでコンパイルされています
#123014 Don't overwrite the prebuilt usage tracking file for the bootstrap build
- 作成者: @jkoritzinsky
- 作成日時: 2026年01月08日 21:20:01(UTC)
- マージ日時: 2026年01月12日 02:40:42(UTC)
- ラベル: needs-area-label
概要
ブートストラップビルドが事前ビルド使用状況追跡ファイルを上書きするという問題(#122968)を修正しました。ビルドの各段階が独立した追跡ファイルを保持するように、ブートストラップビルド中のカスタムパスを設定します。
変更内容
- eng/build.sh (+3/-1):ブートストラップビルド時に
/p:TrackPrebuiltUsageReportFileパラメータを使用してカスタム追跡ファイルパスを設定 - eng/build.ps1 (+3/-0):ブートストラップビルド時に同じパラメータでカスタム追跡ファイルパスを設定
両スクリプト間で実装を統一し、bash/PowerShell環境の両方で一貫した動作を確保します。
パフォーマンスへの影響
影響なし
関連Issue
#122968(ブートストラップビルドが事前ビルド使用状況追跡ファイルを上書きする問題)
その他
なし
#122990 [release/10] Bump MacOS helix queues to latest
- 作成者: @steveisok
- 作成日時: 2026年01月07日 21:50:04(UTC)
- マージ日時: 2026年01月12日 17:07:53(UTC)
- ラベル: Servicing-approved area-Infrastructure
概要
このPRは、.NET runtimeのCI/CDパイプラインにおけるmacOS Helixテストキューを、バージョン13からバージョン14へアップグレードするものです。arm64およびx64アーキテクチャ向けのテスト基盤をmacOS 14に統一し、CI/CDインフラの最新化を図っています。
変更内容
Helixキュー設定ファイル更新
eng/pipelines/coreclr/templates/helix-queues-setup.yml: OSX.13 → OSX.14へアップグレード(arm64/x64、public/internal対応)eng/pipelines/installer/helix-queues-setup.yml: osx.13 → osx.14へアップグレードeng/pipelines/libraries/helix-queues-setup.yml: osx.13 → osx.14へアップグレード
Python自動化スクリプト更新
src/coreclr/scripts/superpmi_collect_setup.py: SuperPMI収集スクリプトでOSX 14キュー参照に統一
テストコード調整(macOS 14環境への対応)
src/installer/tests/Microsoft.NET.HostModel.Tests/MachObjectSigning/SigningTests.cssrc/libraries/System.Net.Ping/tests/FunctionalTests/PingTest.cssrc/libraries/System.Net.Sockets/tests/FunctionalTests/SendTo.cssrc/libraries/System.Net.Sockets/tests/FunctionalTests/SocketOptionNameTest.cs
パフォーマンスへの影響
影響なし。このPRは基盤環境のアップグレードであり、直接的なランタイムパフォーマンスへの影響はありません。macOS 14への更新により、テスト実行環境が最新化され、より信頼性の高いテスト結果が期待されます。
関連Issue
なし
その他
本PR(release/10ブランチ向け)は、release版ランタイムのテスト基盤を最新化するものです。すべての変更は既存テスト機能の互換性を保ちながら、Helixキューのバージョン参照を統一しています。
#122980 [browser][coreCLR] enable System.Runtime.Tests on CI as Release build
- 作成者: @pavelsavara
- 作成日時: 2026年01月07日 17:56:33(UTC)
- マージ日時: 2026年01月12日 22:29:34(UTC)
- ラベル: arch-wasm area-System.Runtime os-browser
概要
WebAssembly(WASM)上で実行される.NET CoreCLRランタイムのテストスイートをReleaseビルドでCI環境で有効化するPRです。System.Runtime.Testsを含む主要なライブラリテストがWasmプラットフォームで実行可能になり、複数の関連するランタイム問題の修正と回避策が含まれています。主な変更は、IL Trimmingの無効化、インタプリタから管理コードへの呼び出しシグネチャの追加、Emscriptenビルドの最適化です。
変更内容
CoreCLR インタプリタ
callhelpers-interp-to-managed.cppに94行のシグネチャ追加(#121955への対応)- Thread コンストラクタのIL Trimmingからの根拠付け
テストインフラストラクチャ
wasm-coreclr-library-tests.ymlパイプライン新規追加(101行)WasmTestLogExitCode、WasmTestAppendElementOnExit、WasmTestExitOnUnhandledErrorフラグの有効化- Chrome インストール対応
System.Runtime.Tests
- 複数テストに
[[ActiveIssue]]属性を追加(#123011関連)- DecimalTests、DelegateTests、GCTests、PeriodicTimerTests等
ビルド最適化
- Emscriptenビルド:JS minification問題修正、
BrowserHost-Staticプライベートリンク化 EmccExportedRuntimeMethod等エクスポート削減- CI パイプライン:
releaseビルド切り替え
IL Trimming
- #123030対応により無効化(テスト互換性のため)
パフォーマンスへの影響
改善点
- Emscripten生成物の削減により、WebAssemblyバイナリサイズ削減の可能性あり
- Release ビルドへの切り替えにより、実行時パフォーマンス向上が期待できます
懸念点
- IL Trimmingを無効化したため、最終ビルド物のサイズ増加の可能性あり
- 複数テストが無効化(ActiveIssue属性)されているため、実際のテストカバレッジは限定的
関連Issue
- Fixes #120707(主要目標)
- Fixes #123030(IL Trimming無効化理由)
- References #121955(callhelpers シグネチャ追加)
- References #122972(WasmTestRunner回避策)
- References #123011(テスト無効化)
その他
- 破壊的変更なし(CI/ビルドシステムの変更)
- 公開API への影響なし(インタプリタ内部実装、テスト属性の追加のみ)
- WebAssembly/Browser ターゲット固有の変更で、デスクトップ .NET には影響なし
- 複数のアクティブな問題への回避策を含むため、これらのIssue解決時に追加修正が必要になる可能性あり
#122952 Optimize HashSet.UnionWith to copy data from another HashSet when empty
- 作成者: @Copilot
- 作成日時: 2026年01月07日 00:26:54(UTC)
- マージ日時: 2026年01月12日 14:29:29(UTC)
- ラベル: area-System.Collections
概要
HashSet<T>.UnionWithメソッドを最適化し、空のHashSet<T>に対して同じコンパレアを持つ別のHashSet<T>から呼び出された場合、各要素を個別に追加するのではなく、内部データ構造を直接コピーするようにしました。これにより、Clear後にUnionWithで再入力するパターンでのパフォーマンスが向上します。
// 最適化の概要
if (Count == 0 && other is HashSet<T> otherAsSet &&
EffectiveEqualityComparersAreEqual(this, otherAsSet))
{
ConstructFrom(otherAsSet); // 直接コピー
return;
}
変更内容
- HashSet.cs:
UnionWithメソッドに最適化ロジックを追加。宛先が空で比較器が一致する場合、既存のConstructFromメソッドを使用して内部配列を直接コピー(+8行) - HashSet.Generic.Tests.cs: パラメータ化されたテストメソッドを追加。空/非空の宛先、疎充填/通常のソース、要素数(0, 1, 75)の組み合わせで12パターンをカバー(+44行)
パフォーマンスへの影響
改善: Clear後にUnionWithで別のHashSetを統合する一般的なパターンでハッシュ計算と衝突チェックをスキップ。具体的な改善率は提供されていませんが、大規模なセットでは相当な改善が期待できます。
リスク: 低。最適化は既証のConstructFromメソッドを使用し、宛先が空かつ比較器が同一の場合のみトリガー。
関連Issue
#92206 - HashSet<T>.UnionWithが別のHashSet<T>からデータをコピーすべきというAPI提案
その他
- HashSetコンストラクタおよび
Dictionary<TKey, TValue>.AddRangeに存在する最適化パターンに準拠 - 全33,491個のSystem.Collectionsテストが合格
- .NET 9以降ではパッケージオーサリングが不要
#122835 Fix StackOverflowException serializing dictionary with string key and object-converter that handles string
- 作成者: @Copilot
- 作成日時: 2026年01月03日 18:37:42(UTC)
- マージ日時: 2026年01月12日 17:25:37(UTC)
- ラベル: area-System.Text.Json
概要
カスタム JsonConverter<object> が特定の型(例:string)を CanConvert で処理する場合、文字列キーを持つディクショナリをシリアライズする際に StackOverflowException が発生する問題を修正しました。根本原因は CastingConverter の無限再帰で、ソースコンバーターの型が対象型と一致しない場合に無限ループが発生していました。
// 修正前に再現する例
public class GenericJsonConverter : JsonConverter<object>
{
public override bool CanConvert(Type typeToConvert) => typeToConvert == typeof(string);
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.GetString();
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) => writer.WriteStringValue(value.ToString());
}
var options = new JsonSerializerOptions { Converters = { new GenericJsonConverter() } };
var value = new Dictionary<string, int> { { "key", 123 } };
JsonSerializer.Serialize(value, options); // StackOverflowException
変更内容
CastingConverter.cs:
ReadAsPropertyName、ReadAsPropertyNameCore、WriteAsPropertyName、WriteAsPropertyNameCoreの4つのプロパティ名メソッドに型等価性チェックを追加。ソースコンバーター型が対象型Tと異なる場合、基底クラスのロジックにフォールバックして正しいコンバーターを解決CustomConverterTests.KeyConverters.cs: 回帰テスト
ObjectConverterHandlingStrings_DictionaryWithStringKey_DoesNotCauseStackOverflowを追加。カスタムコンバーターが正しく使用されず、フォールバックコンバーターが使用されることを検証
パフォーマンスへの影響
影響なし。型等価性チェック(単純な == 比較)は高速で、既存の動作は変わりません。型が一致する場合は従来通り動作し、型が異なる場合は正規の解決パスにフォールバックします。
関連Issue
- dotnet/runtime#118381
その他
- 既存の 49,801 件の System.Text.Json テストがすべてパス
- 破壊的変更なし。低リスク修正
- .NET 9 以降での変更(パッケージオーサリング不要)
#122744 Fix build compilation with OpenSSL 4.0-dev.
- 作成者: @vcsjones
- 作成日時: 2025年12月26日 17:16:17(UTC)
- マージ日時: 2026年01月12日 19:00:45(UTC)
- ラベル: area-System.Security
概要
OpenSSL 4.0-dev との互換性を確保するため、System.Security.Cryptography.Native の関数シグネチャにconst修飾子を追加しました。OpenSSL が const を要求するようになった複数のメソッドに対応し、今後の OpenSSL 本体ブランチとの互換性を維持できるようにしています。
変更内容
- openssl.h:
CryptoNative_GetX509PublicKeyBytesの戻り値をconst ASN1_BIT_STRING*に更新 - openssl.c: 関数実装内の
X509_PUBKEY*ローカル変数に const 修飾子を追加(2箇所)
パフォーマンスへの影響
影響なし。const 修飾子の追加はコンパイル時の型安全性向上のみであり、実行時パフォーマンスには影響しません。
関連Issue
その他
- このPRは OpenSSL 4.0-dev に対するビルドコンパイルエラーを解決するもので、既存の互換性に対する破壊的変更ではありません
- const 修飾子の追加により、OpenSSL ライブラリの API 仕様変更に対応し、将来的な OpenSSL アップグレードにおいても継続的にスカウティングできるようになります
#122729 Fix missing Dispose override in SizeOptIListSelectIterator and SizeOptIListWhereIterator
- 作成者: @Copilot
- 作成日時: 2025年12月25日 02:33:53(UTC)
- マージ日時: 2026年01月12日 12:19:42(UTC)
- ラベル: area-System.Linq
概要
.NET 10で導入されたUseSizeOptimizedLinq=true時に使用されるSizeOptIListSelectIteratorおよびSizeOptIListWhereIteratorが、保持している_enumerator参照を破棄していない回帰バグを修正。カスタムIList<T>実装でEnumerator破棄を追跡している実装(例:ICSharpCode.Decompiler)が機能しなくなっていた。
public override void Dispose()
{
if (_enumerator is { } e)
{
_enumerator = null;
e.Dispose();
}
base.Dispose();
}
変更内容
- Select.SizeOpt.cs:
SizeOptIListSelectIteratorにDispose()オーバーライドを追加 - Where.SizeOpt.cs:
SizeOptIListWhereIteratorにDispose()オーバーライドを追加 - EnumerableTests.cs: エンumerator破棄動作をテストするための共有ヘルパークラス
DisposeTrackingList<T>を追加 - SelectTests.cs / WhereTests.cs:
_EnumeratorDisposedOnCompleteおよび_EnumeratorDisposedOnExplicitDisposeテストシナリオを各1つ追加
パフォーマンスへの影響
影響なし。既存のIListSelectIteratorおよびIEnumerableWhereIteratorで確立されたパターンに従う単一メソッドの追加。正常に動作するEnumeratorに対する動作変更はなし。
関連Issue
dotnet/runtime#122725
その他
- 回帰種別: .NET 9以前では機能していたが、.NET 10で
SizeOptIListSelectIteratorとSizeOptIListWhereIterator導入時にDisposeオーバーライドが欠落 - テスト: SelectTests全体、WhereTests全体、LifecycleTests全体、System.Linqテストスイート全52,190テストが合格
- リスク評価: 低。確立されたパターンに従う単一メソッド追加のみで、互換性破壊なし
#122715 Update comment to use Ascii.IsValid in KeyAnalyzer
- 作成者: @prozolic
- 作成日時: 2025年12月23日 09:50:20(UTC)
- マージ日時: 2026年01月12日 13:12:11(UTC)
- ラベル: area-System.Collections community-contribution
概要
KeyAnalyzer.csのコメントを更新し、以前のPR #119673でIsAllAsciiからAscii.IsValidに変更された実装に合わせて、コメント記述を修正するものです。コード実装は変更されず、ドキュメンテーションの正確性を向上させています。
変更内容
- src/libraries/System.Collections.Immutable/src/System/Collections/Frozen/String/KeyAnalyzer.cs
- コメント内の
IsAllAsciiへの参照をAscii.IsValidに更新(2箇所) - 変更行数:+2/-2
- コメント内の
パフォーマンスへの影響
影響なし(コメントの更新のみで実装コードの変更なし)
関連Issue
- PR #119673(
IsAllAsciiからAscii.IsValidへの変更を実施したPR)
その他
- ドキュメンテーション専用の変更で、実装ロジックへの影響はありません
- コメントの正確性が向上することで、将来のメンテナンス性が向上します
#122554 [release/10.0] Source code updates from dotnet/dotnet
- 作成者: @dotnet-maestro[bot]
- 作成日時: 2025年12月15日 12:23:10(UTC)
- マージ日時: 2026年01月12日 22:49:50(UTC)
- ラベル: Servicing-approved area-codeflow
概要
このPRはVMR (Virtual Monorepo) からのコードフロー更新で、.NET 10.0.1xx ブランチの依存パッケージを2025年12月22日ビルド版に更新しています。Roslyn、NuGet、System.Text.Json など複数の重要なコンポーネントの新バージョンが取り込まれています。
変更内容
バージョン管理ファイルの更新:
eng/Version.Details.propsとeng/Version.Details.xml- 依存パッケージメタデータの更新eng/Versions.props- バージョン番号の調整global.json- .NET SDK バージョン情報の更新
主な依存パッケージ更新:
- Roslyn/コンパイラ: Microsoft.CodeAnalysis 系を 5.0.0-2.25609.109 → 5.0.0-2.25622.101 に更新
- ビルドツール: Microsoft.DotNet.Arcade.Sdk など Arcade ベースのツールを 10.0.0-beta.25609.109 → 10.0.0-beta.25622.101 に更新
- ランタイムライブラリ: System.Reflection.Metadata、System.Text.Json、System.CommandLine を 10.0.3 系に更新
- NuGet: NuGet.Frameworks、NuGet.Packaging など複数パッケージを 7.0.0-rc.11009 → 7.0.2-rc.12301 に更新
- 検証ツール: Microsoft.CodeAnalysis.NetAnalyzers を 10.0.102 → 10.0.103 に更新
スクリプト更新:
eng/common/配下のビルド/検証スクリプト内のパッケージ参照を更新
パフォーマンスへの影響
影響なし。このPRは定期的な依存パッケージ同期であり、パフォーマンスに直接的な変更を含みません。
関連Issue
なし。これはコードフロー自動更新PRです。
その他
- 自動生成PR: dotnet-maestro[bot] により自動生成されたコードフロー更新
- マルチリポジトリ同期: arcade、aspnetcore、efcore、msbuild、roslyn、sdk など14のリポジトリの変更が含まれています
- 用途: ローカルビルド環境を最新のアップストリーム依存と同期
#122423 [release/8.0] Move default build images to macos 15 (and xcode 16) (#120589)
- 作成者: @agocke
- 作成日時: 2025年12月10日 23:56:17(UTC)
- マージ日時: 2026年01月12日 18:09:49(UTC)
- ラベル: Servicing-approved area-Infrastructure
概要
このPRはmacOS 13からmacOS 15(Xcode 16対応)へのビルドイメージアップグレードを行うcherry-pickです。パブリックビルドの既定イメージをmacOS 15に更新し、新環境で互換性のないSwift相互運用性ストレステストを除外します。ビルドプラットフォームは常に最新バージョンを使用すべきという指針コメントも追加されています。
変更内容
- eng/pipelines/common/xplat-setup.yml: パブリックmacOSビルドプールを'macos-13'から'macos-15'に更新、プラットフォーム最新版使用ポリシーのドキュメント追加
- eng/pipelines/coreclr/templates/helix-queues-setup.yml: テストキューのmacOSイメージバージョン更新(4箇所)
- eng/pipelines/libraries/helix-queues-setup.yml: テストキューのmacOSイメージバージョン更新(4箇所)
- src/tests/issues.targets: SwiftRetAbiStress、SwiftCallbackAbiStressテストをmono minijit x64設定で除外(Issue #121983参照)
- その他複数ファイル: Mono関連ファイルの軽微な修正(フォーマット調整など)
パフォーマンスへの影響
影響なし。本変更はビルドインフラストラクチャとテスト除外の更新であり、ランタイムパフォーマンスに直接的な影響はありません。
関連Issue
Issue #121983(Swift interop stress testsのmacOS 15環境での既知問題)
その他
- このPRはrelease/8.0ブランチへのcherry-pick(複数のコミットから)です
- Swift相互運用性ストレステストの除外は、macOS 15/Xcode 16環境での既知の互換性問題への対応です
#122038 Split non-ASCII Uri normalization out of ParseRemaining and avoid temporary allocations
- 作成者: @MihaZupan
- 作成日時: 2025年11月28日 13:37:55(UTC)
- マージ日時: 2026年01月12日 16:14:20(UTC)
- ラベル: area-System.Net
概要
非ASCII文字を含むURIの正規化ロジックをParseRemainingから独立したParseRemaining_RecreateNormalizedStringヘルパーメソッドに分割し、約5個の一時的な文字列割り当てを削減。コード可読性の向上とメモリ効率化を実現しました。
// 変更前:複数の場所で正規化を繰り返し実行
if (HasUnicode)
{
_string += Normalize(_originalString, origIdx, ...);
}
// 変更後:単一のヘルパーメソッドで統合
if (HasUnicode)
{
Rebuild(); // 一度の処理で全ての正規化を完了
}
変更内容
- Uri.cs:
ParseRemainingの正規化ロジックを独立したヘルパーメソッドに分割。Unicode処理を一箇所に集約 - IriHelper.cs:
EscapeUnescapeIriメソッドのシグネチャ変更(戻り値型stringからref ValueStringBuilderパラメータに変更)により、割り当て再利用を実現 - UriSyntax.cs:
IsFullMatchメソッドのインライン化によるコード簡略化 - UriExt.cs: 廃止予定の
EscapeUnescapeIriラッパーメソッドを削除 - IriEscapeUnescapeTest.cs: 新しい
EscapeUnescapeIriAPIに対応したテストヘルパーの更新
パフォーマンスへの影響
大幅な改善を確認
- LongPath(400文字パス): 実行時間 666.8ns → 552.8ns(17%削減)、メモリ割り当て 3752B → 1128B(70%削減)
- ShortSections: 実行時間 158.4ns → 122.4ns(23%削減)、メモリ割り当て 608B → 360B(41%削減)
- Simple: 実行時間 225.1ns → 195.3ns(13%削減)、メモリ割り当て 968B → 448B(54%削減)
一時的な文字列割り当て削減により、ガベージコレッション圧力が軽減されます。
関連Issue
なし
その他
- ホストの個別割り当てについては、今後の改善対象として認識されている
- API変更は
IriHelper.EscapeUnescapeIri(内部実装)に限定され、公開APIへの破壊的変更なし ref ValueStringBuilderパラメータの採用により、スタック割り当てバッファの再利用が可能に
#122032 Add ZipArchiveEntry.Open(FileAccess) and OpenAsync(FileAccess, CancellationToken) overloads to ZipArchiveEntry
- 作成者: @iremyux
- 作成日時: 2025年11月28日 10:58:04(UTC)
- マージ日時: 2026年01月12日 19:53:53(UTC)
- ラベル: area-System.IO.Compression
概要
ZipArchiveEntry.Open() と OpenAsync() に FileAccess パラメータを受け付ける新しいオーバーロードが追加されました。これにより、ユーザーは ZipArchiveMode.Update モードで開かれたアーカイブから、エントリを読み取り専用で効率的にストリーミング読込できるようになります。従来は常に読み書き可能なストリームが返され、メモリ全体にデコンプレスされていました。
public Stream Open(FileAccess access);
public Task<Stream> OpenAsync(FileAccess access, CancellationToken cancellationToken = default);
変更内容
- ZipArchiveEntry.cs:
Open()メソッドにFileAccessパラメータ対応追加(79行追加) - ZipArchiveEntry.Async.cs:
OpenAsync()メソッドにFileAccessパラメータ対応追加(76行追加) - ref/System.IO.Compression.cs: 新しいAPIシグネチャをリファレンスに追加
- Strings.resx: エラーメッセージリソース追加(9行)
- テストファイル: 新機能の包括的なテスト追加(287行)
パフォーマンスへの影響
改善点:
FileAccess.Read指定時、圧縮データのままストリーミング可能 → メモリ効率大幅向上FileAccess.Write指定時、既存データをメモリロードせず、新規ストリームで置換 → Update モード時の不要なメモリ消費を排除
FileAccess.ReadWrite は従来動作と同じため、既存コードの性能特性に変化なし。
関連Issue
- Closes #101243
- Closes #1544
その他
新しいオーバーロードは公開API追加であり、既存コードとの互換性は完全に保たれています。.NET 標準の FileAccess 列挙体を使用しているため、開発者にとって直感的な API となっています。
#120949 Split NativeAOT tests to use separate merged runners
- 作成者: @jkoritzinsky
- 作成日時: 2025年10月21日 18:31:16(UTC)
- マージ日時: 2026年01月12日 21:59:30(UTC)
- ラベル: area-Infrastructure os-ios
概要
NativeAOT テストをランナー統合後もモバイルプラットフォーム上で実行できるように、各テストプロジェクトを独立した「マージされたランナー」として設定し直しました。また、CoreCLR と NativeAOT の ComWrappers 実装が共有化されたため、重複していた ComWrappers テストを削除しました。
変更内容
- NativeAOT テストの構造化:
Directory.Build.props/targetsでHasMergedInTests=trueを設定し、各テストを独立したマージされたランナーとして機能させる - ComWrappers テスト削除:
src/tests/nativeaot/SmokeTests/ComWrappers/全体を削除(重複カバレッジのため) - GenerateUnmanagedEntryPoints テストの改善: Main メソッドベースから xUnit ベースのテスト構造に変更(3つの Fact テストに分割)
- ビルド設定の更新:
nativeaot.csprojのトップレベル マージ ラッパープロジェクトを削除StartupHook.csprojからRequiresProcessIsolationを削除しHasMergedInTestsを追加GenerateUnmanagedEntryPoints.csprojからRequiresProcessIsolationとReferenceXUnitWrapperGeneratorを削除ReferencedAssemblyプロジェクトにCLRTestKindメタデータを追加
- CI/ヘリックス設定:
helixpublishwitharcade.projの正規表現を ForStress バリアント対応に更新
パフォーマンスへの影響
影響なし。これはテスト実行基盤の構造変更であり、テスト実行時間やランタイムパフォーマンスへの直接的な影響はありません。
関連Issue
なし
その他
- 互換性: 破壊的変更なし。テストのみの変更
- テスト戦略: NativeAOT テストが引き続きモバイルプラットフォーム(iOS など)でも実行されるようになり、ランナー統合後の包括的なテストカバレッジが維持される
- コード削除: ComWrappers テスト削除(約384行)により、重複テストメンテナンスの負担が軽減される