Tôi đã slurped trong một tập tin lớn bằng cách sử dụng File :: Slurp nhưng cho kích thước của tập tin tôi có thể thấy rằng tôi phải có nó trong bộ nhớ hai lần hoặc có lẽ nó nhận được thổi phồng bằng cách được biến thành unicode 16 bit. Làm thế nào tôi có thể chẩn đoán tốt nhất loại vấn đề đó trong Perl?Tôi nên sử dụng công cụ nào để tìm ra phân bổ bộ nhớ của mình trong Perl?
Tệp tôi đã thu thập có kích thước 800MB và quy trình perl của tôi phân tích dữ liệu đó đã phân bổ khoảng 1,6 GB khi chạy.
Tôi nhận ra rằng tôi có thể sai về lý do của tôi cho vấn đề này nhưng tôi không chắc chắn cách hiệu quả nhất để chứng minh/bác bỏ lý thuyết của tôi.
Cập nhật:
Tôi đã elminated mã hóa ký tự tinh ranh từ danh sách các nghi phạm. Có vẻ như tôi đang sao chép biến tại một thời điểm nào đó, tôi không thể tìm ra nơi nào.
Cập nhật 2:
Bây giờ tôi đã thực hiện một số điều tra và phát hiện ra rằng nó thực sự chỉ nhận được dữ liệu từ File :: Slurp đó là gây ra vấn đề. Tôi đã có một cái nhìn qua các tài liệu và phát hiện ra rằng tôi có thể lấy nó để trả lại một scalar_ref, ví dụ:
my $data = read_file($file, binmode => ':raw', scalar_ref => 1);
Sau đó, tôi không nhận được lạm phát bộ nhớ của tôi. Mà làm cho một số ý nghĩa và là điều hợp lý nhất để làm khi nhận được dữ liệu trong tình hình của tôi.
Thông tin về việc xem xét biến nào tồn tại, v.v. thường hữu ích mặc dù cảm ơn.
Bài đăng SO này có thể hữu ích: [Làm cách nào tôi có thể xác định chương trình sử dụng bộ nhớ của chương trình Perl của mình trong Windows?] (http://stackoverflow.com/questions/1115743/how-can-i-programmatically-determine- tôi-perl-chương trình-bộ nhớ-sử dụng-under-windows). – Zaid
Điều này thường thú vị mặc dù dữ liệu ở cấp độ đó đã khiến tôi nhận ra rằng tôi có lỗi này. –
Bạn có đang xóa toàn bộ tệp cần thiết cho quy trình của mình không? Phân tích theo từng dòng có khả thi không? –