Ich habe 2 Millionen Dateien verteilt in Unterordnern partitioniert nach Jahren und Monaten. ich bin Looping über die Dateien verwenden:EnumerateFiles in Unterordnern Speichereffizienz
foreach (string file in Directory.EnumerateFiles(data_path, "*.*", SearchOption.AllDirectories))
sollte ich erwarten, dass Partitionierung der unter Verwendung eines verschachtelten Konstrukt gesetzt aufgezählten:
foreach (string year_folder in Directory.EnumerateDirectories(data_path))
foreach (string month_folder in Directory.EnumerateDirectories(year_folder))
foreach (string file in Directory.EnumerateFiles(month_folder))
würde mehr Speicher effizient sein?
Bitte beachten Sie auch meinen Kommentar unten.
Ich bin wirklich scharf darauf, das Ergebnis davon zu hören, wenn Sie einen effizienteren Weg finden, dies zu tun, fügen Sie es meinem fließenden System.IO Wrapper –
Sie sollten beide versuchen und herausfinden; Sie haben den Code in beiden Fällen geschrieben, also profilieren Sie einfach einen Lauf von jedem und Sie werden es sicher wissen. Selbst wenn andere theoretisieren, was besser ist, ist es ziemlich schwierig zu theoretisieren * wie viel * besser man ist. Es ist eher wahrscheinlich, dass der Unterschied so gering ist, dass er nicht besonders wichtig ist. – Servy
was ich versuche zu verstehen, ist, ob der IEnumerable-Satz Speicher belegt, bis die Schleife über das letzte Element iteriert (Begründung der zweite Ansatz), oder ob Garbage Collection häufiger in der Schleife erfolgt (und dann die beiden Ansätze ähnlich sind)) – eyaler