掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字列操作 (ID:7467)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>にしのさん >私の場合、速度云々はコーディング後の調整で、まずはわかりやすく書くべきと思ってます。 はい、わたしもそうしてます。しかし今回は速度が遅いのでどうにかしたい、とい のが主眼でしたので、思いっきりポインタを使ってしまいました。(笑) 実際のところ TFileStream と TMemoryStream では Read Write を使う限り あまり速度の差は無いようです。しかし、TMemoryStream ではポインタが使える ので、ポインタを使う限りでは値のコピーをしなくて済みますのでそれだけ 速いです。 もっとも変換速度に影響するのは、文字列の継ぎ足しをするかどうかです。 st := st + nanika; というのはものすごく効率悪いです。1メガバイトのファイルで最後に10バイト を継ぎ足すとき、文字列全体がコピーされることもあり得ます。これが、何千回 以上も起こることを想像すると、ちょっとたじろぎます。文字列が長ければ 長いほど、継ぎ足しによる効率の低下はひどくなります。 今回の場合のように桁数が一定の場合、IntToHex() と ByteToHexStr() の どちらが速いか試してました。 procedure TForm1.Button1Click(Sender: TObject); var i:integer; st,ed:DWORD; b:Byte; s:string; begin st := GetTickCount; for i := 1 to 10000 do for b := 0 to $FF do s := ByteToHexStr(b); ed := GetTickCount; Label1.Caption := IntToStr(ed-st); end; procedure TForm1.Button2Click(Sender: TObject); var i:integer; st,ed:DWORD; b:Byte; s:string; begin st := GetTickCount; for i := 1 to 10000 do for b := 0 to $FF do s := IntToHex(b,2)+' '; ed := GetTickCount; Label2.Caption := IntToStr(ed-st); end; わたしの環境では ByteToHexStr() のほうが6倍くらい速いです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.