From 878b1759b2fbc861701ceae44054af4864c8a120 Mon Sep 17 00:00:00 2001 From: Timothy Baldridge Date: Mon, 23 Dec 2019 16:28:47 -0700 Subject: [PATCH] Make file copying parallel during compilation --- Wabbajack.Common/Utils.cs | 7 +++++++ Wabbajack.Lib/AInstaller.cs | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Wabbajack.Common/Utils.cs b/Wabbajack.Common/Utils.cs index f7cfcbc1..c4224973 100644 --- a/Wabbajack.Common/Utils.cs +++ b/Wabbajack.Common/Utils.cs @@ -311,6 +311,13 @@ namespace Wabbajack.Common } } + public static Task PDoIndexed(this IEnumerable coll, WorkQueue queue, Action f) + { + return coll.Zip(Enumerable.Range(0, int.MaxValue), (v, idx) => (v, idx)) + .PMap(queue, vs=> f(vs.idx, vs.v)); + } + + /// /// Loads INI data from the given filename and returns a dynamic type that diff --git a/Wabbajack.Lib/AInstaller.cs b/Wabbajack.Lib/AInstaller.cs index b87f9058..ce4550d4 100644 --- a/Wabbajack.Lib/AInstaller.cs +++ b/Wabbajack.Lib/AInstaller.cs @@ -130,10 +130,10 @@ namespace Wabbajack.Lib .ToList(); Info("Installing Archives"); - await archives.PMap(Queue, UpdateTracker,a => InstallArchive(a.Archive, a.AbsolutePath, grouped[a.Archive.Hash])); + await archives.PMap(Queue, UpdateTracker,a => InstallArchive(Queue, a.Archive, a.AbsolutePath, grouped[a.Archive.Hash])); } - private async Task InstallArchive(Archive archive, string absolutePath, IGrouping grouping) + private async Task InstallArchive(WorkQueue queue, Archive archive, string absolutePath, IGrouping grouping) { Status($"Extracting {archive.Name}"); @@ -176,8 +176,8 @@ namespace Wabbajack.Lib File.SetLastWriteTime(to, DateTime.Now); } - vFiles.GroupBy(f => f.FromFile) - .DoIndexed((idx, group) => + await vFiles.GroupBy(f => f.FromFile) + .PDoIndexed(queue, (idx, group) => { Utils.Status("Installing files", idx * 100 / vFiles.Count); var firstDest = Path.Combine(OutputFolder, group.First().To);