RAD Studio 12.2では、多くの新機能の追加や多数の機能強化が行われています。そのうちDelphi ランタイム ライブラリ (RTL) の分野にも注目すべき機能強化がいくつか行われております。
新しいTParallelArray クラス
System.Threadingユニットには、配列項目に対して &ForやSortなどの処理を並列実行できる新しいTParallelArrayクラスが追加されました。マルチコアシステムでは、これにより処理速度が大幅に向上します。
では、この新しいクラスをどのように使用するのでしょうか?
本ブログでは、2つの同一の配列を作成し、通常のシングルスレッドのSortと新しい並列バージョンでソートするコマンドラインプロジェクトを例に簡単なテストケースをご紹介いたします。
[crayon-6767a2fa6a31c277782121/]今回テストケースの検証のために使用したCPUのスペックは、(Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz) で、このPC環境で実行したところ、585%の改善という素晴らしい結果が得られました。(読みやすくするために出力はミリ秒単位に切り詰められています)
[crayon-6767a2fa6a323544414883/]新しいTOrderedDictionary クラス
System.Generics.Collectionsユニットには、TDictionary<K,V>から派生した新しいTOrderedDictionaryクラスが追加されました。このOrdered Dictionaryという順番付きディクショナリは、ディクショナリ内にソート メソッドが統合されたディクショナリクラスです。このクラスを使用することによって、ソートされた順序でデータをナビゲートするfor inループを簡単に作成でき、要素の検索も高速化されます。
例として、以下の手順で実行するプロジェクトをご覧ください。
- 順番付きディクショナリを作成し、いくつかの要素を追加する
- 出力と、1億回キーを検索するのにかかった時間を表示する
- キーでソートし、再度出力を表示し、1億回の検索呼び出しを繰り返す (はるかに高速です!)
- 値でソートし、再度表示する
- 要素を追加する。並べ替え順序で要素が追加されていないことを証明するには、必要に応じて並べ替える必要があります (複数の要素を挿入する場合は、通常、この方が高速です)
出力結果は、以下の通りです。
[crayon-6767a2fa6a328870234476/]RTLのさらなる機能強化
- TRegistryクラスは、rdMultiStringのサポートが改善され、新しいメソッド ReadNoneおよびWriteNone(Windowsのレジストリ値の型であるREG_NONEにマップ)が追加されました。
- System.DateUtilsのRFC822形式の日付のサポートが改善されました。
- RAD Studioに同梱されているDelphiランタイムパッケージ向けのマップファイルが提供されるようになりました。
今回のブログは以上となります。RAD Studio 12.2で追加された多くの新しいRTL機能を、ぜひプロジェクトで活用してください。