2010-06-13 26 views
7

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

+0

[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) –

Trả lời

5

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)

3

Có một số phân tích cú pháp CSV khác để thử:

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).

+0

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

0

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:

http://parsekit.com

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

Các vấn đề liên quan