Tôi cần đọc một tệp văn bản được phân cách bằng không gian lớn và đếm số lượng phiên bản của mỗi mã trong tệp. Về cơ bản, đây là kết quả của việc chạy một số thí nghiệm hàng trăm nghìn lần. Hệ thống này spits ra một tập tin văn bản trông giống loại như thế này:Phân tích cú pháp một tệp văn bản lớn hiệu quả trong C#
A7PS A8PN A6PP23 ...
Và có nghĩa là hàng trăm ngàn những mục này và tôi cần phải đếm số lần xuất hiện của mỗi người trong số các mã.
Tôi đoán tôi có thể chỉ cần mở StreamReader
và đi qua từng dòng, chia tách ký tự khoảng trắng. Xem mã đã gặp phải chưa và thêm 1 vào số mã đó. Tuy nhiên, đó có lẽ là khá ngây thơ, cho kích thước của dữ liệu.
Bất kỳ ai biết thuật toán hiệu quả để xử lý loại xử lý này?
UPDATE:
OK, vì vậy sự đồng thuận có vẻ là cách tiếp cận của tôi là dọc theo dòng đúng
Những gì tôi muốn được quan tâm để nghe những điều như thế - đó là hiệu quả hơn - StreamReader. TextReader, BinaryReader
Cấu trúc tốt nhất để lưu trữ từ điển kết quả của tôi là gì? HashTable, SortedList, HybridDictionary
Nếu không có ngắt dòng thì tập tin (tôi chưa được đưa ra mẫu) sẽ chỉ tách toàn bộ mọi thứ trên một không gian không hiệu quả?
Về cơ bản, tôi đang xem xét làm cho nó như performant càng tốt
nhờ một lần nữa
Có thể dùng thử trước, kiểm tra thời gian và nếu điều đó không được chấp nhận, hãy hỏi lại. – RvdK
Thành thật mà nói, giải pháp của bạn có vẻ là ok, trong mọi trường hợp, bạn sẽ phải xem xét toàn bộ tập tin để đếm số lần xuất hiện mã khác nhau. Bạn có thể tối ưu hóa cách kiểm tra xem một số mã đã được tìm thấy trước đó chưa, ví dụ sử dụng tập hợp hoặc bản đồ – tchrikch
Nếu bạn định đọc từng dòng, hãy đảm bảo tệp thực sự có nhiều hơn một dòng :) – Constantin