ファイルを含む行の数を読み込むパフォーマンスを比較しています。私は速いとSmalltalkのコードをスピードアップすることができますどのようにきれいなファロコアSmalltalkの最新1.3wcとSmalltalkの間の改行数の速度を比較する
| file lineCount |
Smalltalk garbageCollect.
(Duration milliSeconds: [ file := FileStream readOnlyFileNamed: 'bigFile.csv'.
lineCount := 0.
[ file atEnd ] whileFalse: [
file nextLine.
lineCount := lineCount + 1 ].
file close.
lineCount. ] timeToRun) asSeconds.
15
で、その後
$ time wc -l bigFile.csv
1673820 bigFile.csv
real 0m0.157s
user 0m0.124s
sys 0m0.062s
と:
は、私はそれが最初のWCコマンドラインツールを使用していましたwcの性能よりも近いか?
私はあなたのコードで最大の節約は、ファイルのバイナリを作ることから来るのではなく、 "コンテンツ"を使用して処理する前にファイル全体をメモリから読み込むことによると思います。合理的なサイズのチャンクでファイルを読むことは、同じことをする必要があります。 –
#binaryは#asciiValueを呼び出したり、 "Character lf"(たとえtempにキャッシュされていても)と比較して実際に10秒保存しました。 #contentsは#nextを使用した手動ループと3.5秒の間に保存されました。 –