Tôi đang so sánh hiệu suất để đọc số lượng dòng chứa một tệp.So sánh tốc độ đếm dòng mới giữa wc và Smalltalk
tôi đã làm nó đầu tiên sử dụng công cụ dòng lệnh wc:
$ time wc -l bigFile.csv
1673820 bigFile.csv
real 0m0.157s
user 0m0.124s
sys 0m0.062s
và sau đó trong một sạch Pharo Lõi Smalltalk mới nhất 1,3
| 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
Làm thế nào tôi có thể tăng tốc độ mã Smalltalk được nhanh hơn hoặc gần hơn hiệu suất wc?
Tôi đặt cược khoản tiết kiệm lớn nhất trong mã của bạn không đến từ việc tạo tệp nhị phân, nhưng từ đọc toàn bộ tệp vào bộ nhớ trước khi xử lý bằng "nội dung". Đọc các tập tin trong các khối có kích thước hợp lý nên giá vé như nhau. –
Tôi đã kiểm tra lại ... #binary thực sự đã lưu 10 giây so với gọi #asciiValue hoặc so sánh với "Character lf" (ngay cả khi được lưu trong bộ nhớ tạm thời). #contents đã lưu 3,5 giây so với vòng lặp thủ công với #next. –