Dispose images
This commit is contained in:
parent
b98623f092
commit
55713c340b
3 changed files with 394 additions and 322 deletions
|
|
@ -40,7 +40,7 @@ namespace MaddoShared
|
|||
stopwatch.Start();
|
||||
// todo immagini counter
|
||||
//todo set label
|
||||
await CreaImmaginiParallel(options, results, updateEvent, cancellationToken);
|
||||
await ProcessImagesParallel(options, results, updateEvent, cancellationToken);
|
||||
|
||||
// todo set finito label
|
||||
stopwatch.Stop();
|
||||
|
|
@ -49,6 +49,107 @@ namespace MaddoShared
|
|||
$"{stopwatch.Elapsed.Hours}h {stopwatch.Elapsed.Minutes}m ${stopwatch.Elapsed.Seconds}s ({stopwatch.Elapsed.TotalSeconds}s)";
|
||||
}
|
||||
|
||||
public async Task ProcessImagesParallel(
|
||||
Options options,
|
||||
ConcurrentBag<string> results,
|
||||
EventHandler<Tuple<string, int>> updateEvent,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
List<FileData> dataToProcess = GetFilesToProcess(options);
|
||||
|
||||
int threads = options.MaxThreads == 0 ? Environment.ProcessorCount * 2 : options.MaxThreads;
|
||||
|
||||
Func<FileData, Task> processFile = async fileData =>
|
||||
{
|
||||
using var imgCreator = new ImageCreatorSharp(fileData.File, fileData.Directory);
|
||||
await imgCreator.CreaImmagineThread(fileData.File.Name);
|
||||
|
||||
results.Add(fileData.File.Name);
|
||||
|
||||
try
|
||||
{
|
||||
updateEvent?.Invoke(this, new Tuple<string, int>(fileData.File.Name, dataToProcess.Count));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logger.LogError(e, "Error in reporting update");
|
||||
throw;
|
||||
}
|
||||
// finally
|
||||
// {
|
||||
// imgCreator = null;
|
||||
// }
|
||||
};
|
||||
|
||||
if (options.LinearExecution)
|
||||
{
|
||||
foreach (var fileData in dataToProcess)
|
||||
await processFile(fileData);
|
||||
}
|
||||
else
|
||||
{
|
||||
var chunks = options.ChunksSize > 0
|
||||
? SplitList(dataToProcess, options.ChunksSize)
|
||||
: new List<List<FileData>> { dataToProcess };
|
||||
|
||||
foreach (var chunk in chunks)
|
||||
{
|
||||
await chunk.ParallelForEachAsync(
|
||||
processFile,
|
||||
maxDegreeOfParallelism: threads,
|
||||
false,
|
||||
cancellationToken);
|
||||
|
||||
chunk.Clear();
|
||||
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: false, compacting: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<FileData> GetFilesToProcess(Options options)
|
||||
{
|
||||
if (options.AggiornaSottodirectory && options.CreaSottocartelle)
|
||||
{
|
||||
var helper = new FileHelperSharp();
|
||||
return helper.GetFilesRecursive(
|
||||
new DirectoryInfo(options.SourcePath),
|
||||
new DirectoryInfo(options.DestinationPath),
|
||||
"*.jpg",
|
||||
new FileHelperOptions
|
||||
{
|
||||
FilesPerFolder = options.FilePerCartella,
|
||||
Suffix = options.SuffissoCartelle,
|
||||
CounterSize = options.CifreContatore,
|
||||
NumerationType = options.NumerazioneType
|
||||
});
|
||||
}
|
||||
|
||||
var files = Directory.EnumerateFiles(
|
||||
options.SourcePath,
|
||||
"*.jpg",
|
||||
options.AggiornaSottodirectory ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
|
||||
|
||||
return files.Select(x =>
|
||||
{
|
||||
var fInfo = new FileInfo(x);
|
||||
var filePath = fInfo.DirectoryName;
|
||||
var trimmedSourcePath = options.SourcePath.TrimEnd('\\');
|
||||
var newFilePath = fInfo.FullName.Replace(trimmedSourcePath, "").TrimStart('\\');
|
||||
newFilePath = Path.Combine(options.DestinationPath, newFilePath);
|
||||
|
||||
var destFolderPath = new FileInfo(newFilePath).DirectoryName;
|
||||
var destFolderInfo = new DirectoryInfo(destFolderPath);
|
||||
destFolderInfo.EnsureDirectoryExists();
|
||||
|
||||
return new FileData(fInfo, new DirectoryInfo(new FileInfo(newFilePath).DirectoryName));
|
||||
|
||||
// var destDir = new FileInfo(newFilePath).Directory!;
|
||||
// destDir.Create(); // Ensure exists
|
||||
//
|
||||
// return new FileData(fInfo, destDir);
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
public async Task CreaImmaginiParallel(Options options, ConcurrentBag<string> results,
|
||||
EventHandler<Tuple<string, int>> updateEvent,
|
||||
CancellationToken cancellationToken = default(CancellationToken))
|
||||
|
|
@ -115,7 +216,7 @@ namespace MaddoShared
|
|||
{
|
||||
var imgCreator = new ImageCreatorSharp(d.File, d.Directory);
|
||||
await imgCreator.CreaImmagineThread(d.File.Name);
|
||||
|
||||
|
||||
//await new ImageCreatorSharp(d.File, d.Directory).CreaImmagineThread(d.File.Name);
|
||||
|
||||
imgCreator = null;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue