Sau khi thử nghiệm ứng dụng của tôi với Dụng cụ, tôi đã nhận ra rằng hiện tại CSV parser Tôi sử dụng có dung lượng bộ nhớ rất lớn. Có ai có một đề nghị cho một với một dấu chân bộ nhớ thấp?Trình phân tích cú pháp CSV với dung lượng bộ nhớ thấp cho iPhone
Trả lời
Bạn có thể nên thực hiện điều này từng hàng, thay vì đọc toàn bộ tệp, phân tích cú pháp và trả về một mảng với tất cả các hàng trong đó. Trong mọi trường hợp, mã bạn liên kết để tạo ra hàng tỷ đối tượng tạm thời trong một vòng lặp, điều đó có nghĩa là nó sẽ có chi phí bộ nhớ rất cao.
Khắc phục nhanh sẽ tạo ra một NSAutoreleasePool tại lop của vòng lặp, và cống nó ở phía dưới:
while (![scanner isAtEnd]) {
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
... bó mã ...
[innerPool drain];
}
Điều này sẽ quét sạch các đối tượng tạm thời, do đó dung lượng bộ nhớ của bạn sẽ là kích thước của dữ liệu, cộng với đối tượng cho mỗi chuỗi trong tệp (khoảng 8 byte * hàng * cột)
Có một số phân tích cú pháp CSV khác để thử:
- http://michael.stapelberg.de/cCSVParse
- http://cocoawithlove.com/2009/11/writing-parser-using-nsscanner-csv.html (blog của riêng tôi)
Bạn có thể thử nghiệm để xem nếu một trong hai thấp chi phí bộ nhớ.
Cả hai loại này đều không hỗ trợ phân tích cú pháp "dựa trên sự kiện". Trong phân tích dựa trên sự kiện, bạn không bao giờ tải toàn bộ tệp nguồn vào bộ nhớ, chỉ đủ tệp để đọc hàng hiện tại (bạn cũng có thể thực hiện việc này khi đang tải xuống). Bạn phải xử lý mỗi hàng khi nó được đọc và làm cho một số dữ liệu nhất định từ nguồn được giải phóng giữa các hàng.
Đây sẽ là giải pháp trên không lý thuyết thấp nhất. Nếu bạn thực sự cần chi phí thấp, bạn nên thích ứng với một giải pháp hiện có để thực hiện điều đó (tôi không có bất kỳ lời khuyên nào về cách thực hiện điều này).
Thx Matt. Tôi quyết định đi với giải pháp Marks cho thời điểm này bởi vì nó đòi hỏi ít thử nghiệm hơn sau đó chuyển đổi phân tích cú pháp. Nhưng việc chuyển sang trình phân tích cú pháp dựa trên sự kiện hiện đã có trên lộ trình của tôi. Libcsv (http://sourceforge.net/projects/libcsv/) có vẻ như một. – catlan
Nó không phải là trình phân tích cú pháp CSV mở chua framework Ce ParseKit có một bộ mã thông báo chuỗi mạnh mẽ/thuận tiện/có thể định cấu hình có thể thuận tiện cho CSV hoặc các loại phân tích cú pháp/tokenizing khác.
Khung:
Một số tài liệu hướng dẫn sử dụng:
http://parsekit.com/tokenization.html
Lớp PKTokenizer:
http://github.com/itod/parsekit/blob/master/include/ParseKit/PKTokenizer.h http://github.com/itod/parsekit/blob/master/src/PKTokenizer.m
- 1. Haskell phân tích cú pháp tệp xml lớn với bộ nhớ thấp
- 2. Tùy chọn phân tích cú pháp CSV với .NET
- 3. Phân tích cú pháp CSV nhanh
- 4. Trình tạo trình phân tích cú pháp và trình phân tích cú pháp cho Common Lisp
- 5. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 6. Trình phân tích cú pháp CSV đầy đủ tính năng cho Haskell?
- 7. Phân tích html với trình phân tích cú pháp SAX
- 8. Phân tích cú pháp tệp CSV SSE 4.2
- 9. Trình phân tích cú pháp XML nào cho Haskell?
- 10. Phân tích cú pháp XML trong iPhone
- 11. Bộ phân tích cú pháp regex nhẹ
- 12. Trình phân tích cú pháp PHP cho các tệp cachegrind?
- 13. Trình phân tích cú pháp Wiki nào?
- 14. csv phân tích cú pháp đọc tiêu đề
- 15. Phân tích cú pháp Python CSV chính xác
- 16. Trình phân tích cú pháp JavaScript cho DOM
- 17. Python - cách đọc/phân tích cú pháp csv như dòng?
- 18. Trình phân tích cú pháp tùy chọn cho C/C++?
- 19. Cần trình phân tích cú pháp C++
- 20. Trình phân tích cú pháp phân tích cú pháp Haskell để gặp phải [...]
- 21. Trình phân tích cú pháp C++ GLR với Bison
- 22. Tôi có thể tìm trình phân tích cú pháp CSV cho NSArray cho Mục tiêu-C ở đâu?
- 23. Chọn trình phân tích cú pháp Haskell
- 24. Trình phân tích cú pháp email Java?
- 25. Trình phân tích cú pháp HTML
- 26. Trình phân tích cú pháp SVG Python
- 27. Sự khác biệt giữa trình phân tích cú pháp SAX XML, Kéo trình phân tích cú pháp & Trình phân tích cú pháp DOM trong android
- 28. Phân tích cú pháp HTML với Erlang
- 29. Trình phân tích cú pháp tùy chỉnh cho JQuery Tablesorter
- 30. Trình phân tích cú pháp XML tốt nhất cho PHP
[6 cách để phân tích cú pháp đầu tiên .CSV? Hiệu suất cao!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –