[DatFile] Can populating the master DAT be parallel?

This commit is contained in:
Matt Nadareski
2017-03-01 23:28:46 -08:00
parent 0d780a7088
commit 082599111d

View File

@@ -122,18 +122,29 @@ namespace SabreTools.Helper.Dats
Globals.Logger.User("Processing complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); Globals.Logger.User("Processing complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff"));
Globals.Logger.User("Populating internal DAT"); Globals.Logger.User("Populating internal DAT");
for (int i = 0; i < inputs.Count; i++) Parallel.For(0, inputs.Count,
new ParallelOptions() { MaxDegreeOfParallelism = Globals.MaxDegreeOfParallelism },
i =>
{ {
// Get the list of keys from the DAT
List<string> keys = datHeaders[i].Keys.ToList(); List<string> keys = datHeaders[i].Keys.ToList();
Parallel.ForEach(keys, Parallel.ForEach(keys,
new ParallelOptions { MaxDegreeOfParallelism = Globals.MaxDegreeOfParallelism }, new ParallelOptions() { MaxDegreeOfParallelism = Globals.MaxDegreeOfParallelism },
key => key =>
{ {
// Add everything from the key to the internal DAT
AddRange(key, datHeaders[i][key]); AddRange(key, datHeaders[i][key]);
// Now remove the key from the source DAT
lock (datHeaders)
{
datHeaders[i].Remove(key); datHeaders[i].Remove(key);
});
datHeaders[i].Delete();
} }
});
// Now remove the file dictionary from the souce DAT to save memory
datHeaders[i].Delete();
});
Globals.Logger.User("Processing and populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff")); Globals.Logger.User("Processing and populating complete in " + DateTime.Now.Subtract(start).ToString(@"hh\:mm\:ss\.fffff"));