问题描述
我想将 iPhone HEIC 图像转换为 Jpeg 文件。由于有很多图像,我用 Parallel.ForEach
string[] files = Directory.GetFiles(inputPath,"*.heic");
Parallel.ForEach(files,new ParallelOptions() { MaxDegreeOfParallelism = 16 },file =>
{
using (var image = new MagickImage(file))
{
Console.WriteLine(file);
// Save frame as jpg
image.Write(Path.Combine(output,Path.GetFileNameWithoutExtension(file) + ".jpg"));
image.dispose();
}
});
但是当我设置 MaxDegreeOfParallelism = 16
时出现此错误(8 或以下似乎有效)
ImageMagick.MagickCorruptimageErrorException: Insufficient memory (case 4)
长:
Unbehandelte Ausnahme: System.AggregateException: Mindestens ein Fehler ist aufgetreten. ---> ImageMagick.MagickCorruptimageErrorException: Insufficient memory (case 4) `T:\Imageconversion\output\IMG_0934.jpg' @ error/jpeg.c/JPEGErrorHandler/343 bei ImageMagick.MagickExceptionHelper.Check(IntPtr exception) bei ImageMagick.MagickImage.NativeMagickImage.WriteFile(MagickSettings settings) bei ImageMagick.MagickImage.Write(String fileName) bei HEIC_Conversion.Program.<>c__displayClass2.<Main>b__1(String file) bei System.Threading.Tasks.Parallel.<>c__displayClass30_0`2.<ForEachWorker>b__0(Int32 i) bei System.Threading.Tasks.Parallel.<>c__displayClass17_0`1.<ForWorker>b__1() bei System.Threading.Tasks.Task.InnerInvoke() bei System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask) bei System.Threading.Tasks.Task.<>c__displayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) bei System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout,CancellationToken cancellationToken) bei System.Threading.Tasks.Task.Wait() bei System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive,Int32 toExclusive,ParallelOptions parallelOptions,Action`1 body,Action`2 bodyWithState,Func`4 bodyWithLocal,Func`1 localInit,Action`1 localFinally) bei System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](TSource[] array,Action`3 bodyWithStateAndindex,Func`4 bodyWithStateAndLocal,Func`5 bodyWithEverything,TLocal](IEnumerable`1 source,Action`1 localFinally) bei System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source,Action`1 body)
反正有足够的内存剩余:(用红色箭头标记异常)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)