Tôi đã viết một chương trình phân tích mã nguồn của dự án và báo cáo các vấn đề và số liệu khác nhau dựa trên mã.Ngăn ngừa các vấn đề về bộ nhớ khi xử lý một lượng lớn văn bản
Để phân tích mã nguồn, tôi tải các tệp mã tồn tại trong cấu trúc thư mục của dự án và phân tích mã từ bộ nhớ. Mã này trải qua quá trình xử lý mở rộng trước khi nó được chuyển cho các phương pháp khác để phân tích thêm.
Mã được chuyển đến một số lớp khi được xử lý.
Ngày khác tôi đang chạy nó trên một trong những dự án lớn hơn nhóm của tôi có, và chương trình của tôi thèm muốn tôi vì có quá nhiều mã nguồn được nạp vào bộ nhớ. Đây là một trường hợp góc vào thời điểm này, nhưng tôi muốn có thể xử lý vấn đề này trong tương lai.
Cách tốt nhất để tránh các vấn đề về bộ nhớ là gì?
Tôi đang suy nghĩ về việc tải mã, thực hiện xử lý ban đầu tệp, sau đó nối tiếp kết quả vào đĩa, để khi tôi cần truy cập lại, tôi không phải trải qua quá trình thao tác lại mã thô. Điều này có nghĩa không? Hoặc là serialization/deserialization đắt hơn sau đó xử lý mã một lần nữa?
Tôi muốn giữ mức hiệu suất hợp lý trong khi giải quyết vấn đề này. Hầu hết thời gian, mã nguồn sẽ phù hợp với bộ nhớ mà không có vấn đề, do đó, có cách nào để chỉ "trang" thông tin của tôi khi tôi còn thiếu bộ nhớ? Có cách nào để biết khi nào ứng dụng của tôi sắp hết bộ nhớ?
Cập nhật: Vấn đề không phải là một tệp duy nhất lấp đầy bộ nhớ, tất cả các tệp trong bộ nhớ cùng một lúc lấp đầy bộ nhớ. Ý tưởng hiện tại của tôi là xoay vòng ổ đĩa khi tôi xử lý chúng
Tôi sẽ đi theo cách tiếp cận tuần tự hóa. Nhưng hãy xem mã nguồn của FindBug. Họ làm điều gì đó tương tự và có thể họ đã giải quyết vấn đề này: http://findbugs.sourceforge.net/downloads.html –
Tỷ lệ giữa kích thước trong bộ nhớ và kích thước của các tệp trên đĩa là gì? –
Bạn đã đề cập đến việc truyền các chuỗi giữa các lớp. Tùy thuộc vào cách bạn xử lý các chuỗi, có lẽ một số bản sao đang được thực hiện và vì vậy bạn đang sử dụng nhiều bộ nhớ hơn mức bạn cần. Tôi không biết chính xác C# xử lý các chuỗi như thế nào, nhưng nếu nó sao chép chúng thì đó có thể là vấn đề. – rsethc