注目の大部分は.NET Coreにあるが、従来の.NET Frameworkに対する作業が続いている。.NET 4.8の「早期アクセス」プレビューでは、高グラフィックスDots per Inch(DPI)、アクセシビリティ、同時実行性など、Microsoftが最も関心を持つ分野が示されている。
.NET 4.8は2019年にリリースされる予定である。現在の予想としては、Windows 10 build 1607上で実行できる想定であるが、その決定は最終的なものではない。
Span<T>
何ができるようになるかに入る前に、最も要求されている機能であるSpan
Spanは.NET Core 2.1に含まれています。Spanを.NET Framework 4.8に含めることを検討し、既存のアプリケーションとの互換性の問題があるため、含めないことに決定した。.NET Coreで有効になっているシナリオのいくつかを有効にするSystem.Memory Nugetパッケージで、Spanとその他の関連タイプを使えます。
System.Memory: https://www.nuget.org/packages/System.Memory/
高DPI
高DPIは引き続き.NETにとっての注目点となる。モニターの解像度が向上し続けるにつれて、テキストとイメージが小さすぎて読みにくくならないようにアプリケーションをスケールアップする必要がある。このリリースでは、ClickOnceとWinFormsは高DPIアップデートを適応している。
高DPI問題が発生し続ける理由がいくつかある。1つ目は、高解像度モニタが手に入るようになったことである。Microsoftは、スケーリングが必要となるハードウェアが利用できるようになるまで、200%と300%でのスケーリングを効果的にテストできていなかった。モニターの解像度が向上しなくなるまで、スケーリングは引き続き問題になる。
もう1つの課題は、マルチモニタの設定である。アプリケーションが異なる解像度のモニター間を移動すると、スケーリングを再計算してイメージをスワップアウトする必要がある。さらに悪いことに、アプリケーションは異なる解像度の2つ以上のモニターに重なることがある。このような状況に対処するには、さまざまな妥協が必要であり、結果は必ずしも満足できるものではない。
パフォーマンス
AsyncLocal向けのメモリ使用量の削減やスピンロックの微調整などの、通常の内部的な調整のほかに、このリリースではSqlDataReader.ReadAsyncが実際には非同期で実行されていなかった問題が修正されている。
デッドロックと競争条件
.NET Frameworkの成熟度を考えると、多くの主要ライブラリに競合状態やデッドロックが残っていることを聞かされるのは驚きである。並行実行に関する問題の一覧の一部を下に示す。
- CLR:新しい動的メソッドの同時呼び出し時の潜在的なクラッシュ
- CLR:EventSourceでDispose()を呼び出し時のデッドロックの可能性
- Networking:NetworkInformation.NetworkChangeデッドロックのシナリオで、NetworkChangedリスナーとユーザのコールバックに関連したロック
- WCF:Set()が呼び出される前にWaitHandleを閉じるAsyncResultに存在する競合条件
- WCF:接続を中断したときの競合状態で、CleanupChannelCollectionsでObjectDisposedExceptionがスローされる
- ワークフロー:極端な使用状況(MSDTCへの大量接続)では、CriticalSectionを1つのスレッドで無期限に保持できた
- ユーザーインターフェイスアクセシビリティ(UIA)
UIAの懸念は、WinFormsが新しいUIAの動作となり、UIAのバグがUIAとWPFの両方で修正されていることを引き続き優先事項である。(UIA以外の多くのバグも両方で修正された。)
すべての変更点の一覧については、.NET 4.8リリースノートを参照してください。プレビュービルド自体は、.NETブログを介して入手可能である。
Rate this Article
- Editor Review
- Chief Editor Action