Daha sonra temizlik yapmakla görevlendirilmiş bir uygulamam var. Uygulamanın kendisi nispeten basittir - bir SQL sorgusu çalıştırır, bir web servisi tüketir ve sonuçları bir günlük dosyasına gönderir. Benim işim, uygulama onlarla yapıldıktan sonra dosyaları NAS'ımıza arşivlemektir. Dosyaları, yalnızca onlarla bitene kadar kilitler, böylece küçük bir karmaşıklık ekler. Ayrıca uygulamaya, sadece günlüklere dokunmama izin verilmiyor. Neyse başvurum oldukça basittir: Dosya açılabilirTers Akış Okuyucusu
- Kontrol if (IOException yakalamak) ve hiçbir istisnası atılır eğer bir bool [] erişilebileceğini onu işaretleyin.
- Doğru olarak işaretlenmiş dosya dizisini inceleyerek, dosyanın her satırını ReadLine yöntemini kullanarak bir StreamReader'a okuyun. Uygulama bazen hıçkırdığı ve bitmediği için, dosyanın tamamlanıp tamamlanmadığını söylemek için IOException'ı kullanamıyorum - aslında metni ayrıştırmak zorundayım.
- Bildiri tamamlandığını gösteren metin bulunursa, dosyayı sıkıştırın, arşivlenmiş dosyayı NAS'a yükleyin ve orijinali silin.
Kodum işe yarıyor, sadece çok zaman alıyor (günlük dosyaları her biri 500 MB civarındadır). İyileştirme konusundaki düşüncelerim, aramamın üst kısımdan ziyade dosyanın alt kısmından başlamasını gerektiriyordu, ancak StreamReader böyle bir yöntemi desteklemiyor. Ben ReadToEnd yöntemini kullanamıyorum ve sonra bir ters bellek istisnası attı çünkü okundu. Günlük dosyasının ayrıştırılmasını hızlandırabilmem için bir fikrin var mı?
gibi koduyla yapılabilir? zip yapma, NAS'a kopyalama, silme veya dosyayı açmaya çalışırken (ve büyük olasılıkla başarısız olan) tüm bu şeyler bir süre alabiliyormuş gibi geliyor – luke
Olası dupe: http://stackoverflow.com/questions/452902/how-to-read -a-metin-dosya-ters-ile-iterator-in-c –
İyi soru. Evet, kesinlikle yürütmenin zaman alıcı kısmı olan ayrıştırma. Kodu ayrı işlevlere ayırdım ve her birine kırılma noktaları koydum. Sıkıştırma yaklaşık 30 - 45 saniye sürüyor, ayrıştırma iki saatten fazla sürebilir. – monkeyninja