Parallelize raw/ copy and document overall architecture
CopiaFileTrovati now copies with Parallel.ForEach (degree 6) instead of sequentially: the bottleneck is network latency to the share, not CPU, so overlapping copies gives a large speedup (~5x in a synthetic benchmark with simulated SMB latency, documented in docs/copia-raw-parallela.md). Also adds docs/architettura.md, a full architecture overview of every source file, the wizard's 5 phases, dialogs, persistence and standalone scripts. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0966e66232
commit
6511d58b01
4 files changed
+201
-6
No files matched your search
@@ -954,23 +954,25 @@ public partial class Form1 : Form
|
||||
}
|
||||
|
||||
/// <summary>Copia i file trovati nella cartella "raw" indicata, creandola se necessario.
|
||||
/// Ritorna il numero di file copiati con successo.</summary>
|
||||
/// Ritorna il numero di file copiati con successo. Parallelizzata (grado limitato): il
|
||||
/// collo di bottiglia è la latenza di rete verso la share, non la CPU, quindi poche copie
|
||||
/// concorrenti bastano a sovrapporre le attese senza saturare la share.</summary>
|
||||
internal static int CopiaFileTrovati(IEnumerable<string> percorsi, string cartellaRaw)
|
||||
{
|
||||
Directory.CreateDirectory(cartellaRaw);
|
||||
int copiati = 0;
|
||||
foreach (var percorso in percorsi)
|
||||
Parallel.ForEach(percorsi, new ParallelOptions { MaxDegreeOfParallelism = 6 }, percorso =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.CreateDirectory(cartellaRaw);
|
||||
File.Copy(percorso, Path.Combine(cartellaRaw, Path.GetFileName(percorso)), overwrite: true);
|
||||
copiati++;
|
||||
Interlocked.Increment(ref copiati);
|
||||
}
|
||||
catch (Exception ex) when (ex is IOException or UnauthorizedAccessException)
|
||||
{
|
||||
// ponytail: file non raggiungibile (share offline, permessi) -> lo si salta, non blocca gli altri
|
||||
}
|
||||
}
|
||||
});
|
||||
return copiati;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user