shortstring
Delphi 7 であっても、関数と一緒に使用しないでください。
関数の結果として使用される場合、shortstring
完全なコンテンツ (つまり、すべての文字) が常にコピーされます。
string
そのため、文字列をコピーせずに文字列の内部参照カウントをインクリメントするだけの単純な変数を使用するよりも遅くなります。
ほとんどの Delphi RTL/VCL ライブラリはstring
を使用するため、コードで を使用shortstring
すると、これらのメソッドの呼び出しごとに多くの変換が追加されますが、plain を使用する場合はそうではありませんstring
。また、Windows API を呼び出す場合、Delphi のstring
型は既にゼロで終了しているため、使用時に必要な割り当てと変換が回避されますshortstring
。
したがって、特にメモリ マネージャーとしてFastMM4shortstring
を使用する場合は、Delphi のすべてのバージョンで の方が遅いことを知っておく必要があります。RTL /VCL/API 呼び出しに を使用すると、Delphi コンパイラは実際には非表示のテンポラリを割り当てます。したがって、ヒープからのバッファ...効率的とはほど遠い: 文字列をすぐに使用することをお勧めします!shortstring
string
それが遅いと思われる場合string
(マルチスレッドにあまり適していないアトミック参照カウントまたはメモリ割り当てのため)、使用しないでshortstring
ください 、しかし他の構造-私の答えを参照してください https://stackoverflow.com/a/6076407/458259そしてhttp://delphitools.info/samplingprofiler/のようなツールでプロファイリングせずに最適化しないでください
integer
値を使用する関数の場合byte/word/cardinal/integer
、速度に違いはありません。私の習慣はinteger
、CPU レジスタのサイズに合うように、可能な限り使用することです。Int64
2つのレジスタまたはスタック上の一時変数を使用するため、32ビット未満の値の種類のみが遅くなります。
更新: 新しいバージョンの Delphi では、" inline
" キーワードが使用されます。これは、そのような型を返す小さな関数のパフォーマンスに大きく役立つ可能性があります。また、Delphi 2009 以降、string は Unicode でありshortstring
、システムの非 Unicode アプリケーション コード ページに固定されているため、非推奨です。shortstring
自分が何をしているのか正確にわかっていて、Alt-F2 を使用して生成された asm コードを確認し、どの非表示の RTL 関数が呼び出されているかを推測できる場合にのみ使用してください。