Magick.NET insufficient Insufficient memory (case 4)

问题描述

我想将 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) 

长:

enter image description here

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)

enter image description here

反正有足够的内存剩余:(用红色箭头标记异常)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)