Tôi có một ứng dụng mà tôi đã được giao nhiệm vụ dọn dẹp sau đó. Bản thân ứng dụng là tương đối đơn giản - nó chạy một truy vấn SQL, tiêu thụ một dịch vụ web và đưa các kết quả vào một tệp nhật ký. Công việc của tôi là lưu trữ các tệp vào NAS của chúng tôi sau khi ứng dụng được thực hiện với chúng. Nó khóa các tập tin độc quyền cho đến khi nó được thực hiện với họ để nó thêm một chút phức tạp. Tôi cũng không được phép chạm vào ứng dụng, chỉ các bản ghi. Dù sao đơn đăng ký của tôi khá đơn giản:Reverse Streamreader
- Kiểm tra xem tệp có thể được mở (bắt IOException) và đánh dấu nó là có thể truy cập được trong bool [] nếu không có ngoại lệ.
- Đi qua hàng loạt tệp được đánh dấu đúng, đọc từng dòng của tệp vào StreamReader bằng phương pháp ReadLine. Bởi vì các ứng dụng thỉnh thoảng trục trặc và không kết thúc, tôi không thể chỉ đơn giản là sử dụng IOException để nói nếu tập tin được hoàn thành - Tôi phải thực sự phân tích văn bản.
- Nếu văn bản cho biết hoàn thành được tìm thấy, hãy nén tệp, tải tệp đã lưu trữ vào NAS và xóa tệp gốc.
Mã của tôi hoạt động, rất tốn thời gian (các tệp nhật ký là 500 MB). Suy nghĩ của tôi về cải tiến liên quan đến việc bắt đầu tìm kiếm của tôi từ dưới cùng của tập tin thay vì từ đầu, nhưng StreamReader không hỗ trợ một phương pháp như vậy. Tôi không thể sử dụng phương thức ReadToEnd và sau đó đọc ngược lại vì nó chỉ ném ra một ngoại lệ bộ nhớ. Bất kỳ suy nghĩ về một cách tôi có thể tăng tốc độ phân tích cú pháp của tập tin đăng nhập?
bạn có biết rằng phân tích các tập tin là phần chậm? không zip, sao chép vào NAS, xóa hoặc cố gắng để mở tập tin (và có thể không) tất cả những điều đó âm thanh như họ có thể mất một thời gian – luke
Có thể dupe: http://stackoverflow.com/questions/452902/how-to-read -a-text-file-reversely-with-iterator-in-c –
Câu hỏi hay. Vâng, chắc chắn là việc phân tích cú pháp là phần tốn thời gian thực hiện. Tôi đã tách mã thành các hàm riêng lẻ và đặt các điểm ngắt trên mỗi hàm. Quá trình nén mất khoảng 30 - 45 giây, việc phân tích cú pháp có thể mất tới hai giờ. – monkeyninja