Bir dosyada kaç satır bulunduğunu okumak için performansı karşılaştırıyorum. Ben daha hızlı olması için Smalltalk kod hızlandırabilir Nasıl temiz bir Pharo Çekirdek Smalltalk son 1,3Yeni satır sayılarını karşılaştırmak wc ve Smalltalk arasındaki hızı
| 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
sonra
$ time wc -l bigFile.csv
1673820 bigFile.csv
real 0m0.157s
user 0m0.124s
sys 0m0.062s
ve:
Ben ilk wc komut satırı aracını kullanarak yaptım veya wc performansından daha mı yakın?
Bahse girerim Kodunuzdaki en büyük tasarruf, dosyayı ikili yapmaktan değil, tüm içeriği "içerikler" kullanarak işlenmeden önce belleğe okumadan gelmez. Dosyayı makul boyuttaki parçalarda okumak, yaklaşık aynı şeyi yapmalıdır. –
İki kez kontrol ettim ... #binary aslında #asciiValue çağırmak veya "Karakter lf" ile karşılaştırmak için 10 saniye kaydedildi (bir sıcaklıkta önbelleğe alınsa bile). #contents, #next ile manuel döngüye karşılık 3.5 saniyede kaydedildi. –