Tài liệu của Julia mô tả pre-allocating memory cho số Array
để cải thiện hiệu suất bằng cách tránh thu gom rác thải. Điều này có thể làm với một String
là một Vector, sau khi tất cả? String
mã nguồn là here.Bạn có thể preallocate không gian cho một String ở Julia?
Trường hợp sử dụng của tôi là tôi đang xử lý các khối văn bản lớn, sử dụng readuntil()
để lấy một đoạn, sau đó thực hiện regex match()
hoặc matchall()
hoặc replace()
. Tôi đã mã hóa nó trong Perl, nhưng muốn xem liệu Julia có thể nhanh hơn không. Tôi đã biết độ dài của chuỗi dài nhất mà tôi sẽ phải xử lý.
fs=open(fn,"r")
while !eof(fs)
text = readuntil(fs, "</tag>")
text = match(r"pattern"s, text).match
text = replace(text, r"badpattern", "goodpattern")
text = replace(text, r"anotherbadpattern", "betterpattern")
... (dozens more replacements)
end
close(fs)
Tôi mong đợi đĩa I/O là nút cổ chai chính, nhưng tôi quan tâm đến việc tìm hiểu về mọi thứ sẽ hữu ích. Tôi hoan nghênh mọi đề xuất về các phương pháp có thể để đẩy nhanh quá trình.
Mã nguồn bạn đã liên kết là một hàm tạo cho 'Chuỗi' lấy' Vector' làm đầu vào, nhưng nó không phải là định nghĩa kiểu (mà, như @slowbrain chỉ ra, là không thay đổi) . –
Bạn có thể thêm mẫu mã cụ thể hơn không? –
@DanGetz Đã thêm một ví dụ về mã. Những gì tôi đã hy vọng là không phải (lại) phân bổ chuỗi 'text' vài triệu lần vì có rất nhiều vòng lặp để thu thập văn bản ed và nhiều thay thế. Tôi đã hy vọng sử dụng khả năng regex của Julia kể từ khi tôi đã mã hóa điều này trong Perl, nhưng như @ColinTBowers và @slowbrain đã chỉ ra, String là bất biến, vì vậy không thể được phân bổ lại. –
ultradian