Programımın bir disk sürücüsündeki dosya sayısını sayması gerekiyor.Bir sürücüdeki dosya sayısını sayma
Bunu yapmanın en hızlı yolu nedir?
Directory.GetFiles() çok yavaş olduğu için bir alternatif değildir.
Programımın bir disk sürücüsündeki dosya sayısını sayması gerekiyor.Bir sürücüdeki dosya sayısını sayma
Bunu yapmanın en hızlı yolu nedir?
Directory.GetFiles() çok yavaş olduğu için bir alternatif değildir.
kernel32.dll
'u içe aktarmayı denediniz mi?
Burada yayınlanmış iyi bir uygulama örneği var: https://stackoverflow.com/a/724184/912851. Bakmaya değer olabilir.
Düzenleme: Hayatımda gördüğüm en hızlı bir this application olduğunu. Ntfs dergilerini kullanır. ve birkaç saniye içinde sabit diskimde milyonlarca dosya listeliyor. Sanırım C++ veya c üzerinde bir sdk ve kaynakları var. Belki yönetilen bir dll oluşturabilir ve C# üzerinde kullanabilirsiniz?
Evet, bunu da denedim, gerçekten yavaş. Ama teşekkürler – animaonline
Ben de 42k dosyaları ile dizin ağacında her iki yöntemi karşılaştırmak için küçük bir kod yaptım merak ediyorum: GetFiles = 1.2seconds, bu yöntem = 650ms. Yani zaten 2x daha hızlı ... Oded zaten yukarıda yazdığı gibi, IO yavaş, yüz binlerce dosya için anında sonuç elde edemezsiniz ... – Fabske
Func<string, int> files = null;
files = p => Directory.GetFiles(p).Length() + Directory.GetDirectories(p).Select(p1 => files(p1));
int count = files(@"c:\");
Horrible ama linqy!
Directory.GetFiles() bir alternatif değil ^^ – animaonline
Bu nasıl OP soruyor _slowness_ sorunu ele alıyor? – Oded
Korkunç, GetFiles kullanın ve ... derleme yapmıyor: p – Fabske
Eğer sürücü USN günlüğü dışarı okuyabilir, bu çok hızlıdır ancak
o bir cevap ne biçimBen de FAT dosya sistemlerinde çalışan bir çözüme ihtiyacım var. – animaonline
yönetici haklarına ihtiyaç? Bir yolu olmalı, NTFS günlüğümüz var, WMI'mız var ve bu yüzden lol var. – animaonline
Bu bir _comment_ soru, cevap değil. Ve sadece "GetFiles" in yavaş olduğunu söylüyorsunuz. Hızlı nedir, tanımında? Soru, detaylardan yoksun. NTFS günlüğünüz varsa – Oded
, o zaman Directory.GetFiles() başlangıçta yapmak ve daha sonra günlük bakım sayacı kullanmak mümkündür. – volody