私は無作為に(非常にアクティブで堅牢なWindowsサービスで2週間に1回のライブ環境で、約50000+画像のサイズを変更します)AccessViolationException:保護されたメモリを読み書きしようとしました。これはしばしば、他のメモリが壊れていることを示します。保護されたメモリを読み書きしようとしました。 Websupergooの例外でABCPDF7を処分しました
スタックトレースは次のとおりです。 スタック:
public void Resize(int width, int height, bool addTransparent)
{
using (Canvas tempCanvas = new Canvas())
{
DrawOptions options = new DrawOptions();
if (height == 0)
{
if (width <= Width)
{
options.Limit = new Size(width, 0);
}
else
{
double scale = (double)width/(double)Width;
options.Transform.Magnify(scale, scale, 0, 0);
}
}
else if (width == 0)
{
if (height <= Height)
{
options.Limit = new Size(0, height);
}
else
{
double scale = (double)height/(double)Height;
options.Transform.Magnify(scale, scale, 0, 0);
}
}
else
{
double scaleX = (double)width/(double)Width;
double scaleY = (double)height/(double)Height;
options.Transform.Magnify(scaleX, scaleY, 0, 0);
}
//add transparency if set.
if (addTransparent)
options.Transparency = true;
tempCanvas.DrawImage(CurrentImage, options);
CurrentImage = tempCanvas.ToImage();
} <<<<---- HERE WE GET THE EXCEPTION ON THE DISPOSE
}
誰が何を私がある場合、私はこのエラーを取得するか、なぜ私は解決することができます:
ここat WebSupergoo.ABCpdf7.Internal.NDoc._Clear(IntPtr inDoc)
at WebSupergoo.ABCpdf7.Internal.NDoc.Clear(IntPtr inDoc)
at WebSupergoo.ABCpdf7.Doc.Clear()
at WebSupergoo.ImageGlue7.Canvas.Dispose(Boolean disposing)
at WebSupergoo.ImageGlue7.Canvas.Dispose()
at XXXXX.Classes.Imaging.Image.Resize(Int32 width, Int32 height, Boolean addTransparent) in <path>\Image.cs:line 149
at XXXXX.Classes.XXXXX.Object.Import.Media.CreateImageScale(String destDir, Int32 width) in <path>\Media.cs:line 272
at XXXXX.Classes.XXXXX.Object.Import.Media.CreateResizedImages(String threadId) in <path>\Media.cs:line 242
at XXXXX.Classes.XXXXX.Object.Import.Threading.ResizeThread.Run(Object o) in <path>\ResizeThread.cs:line 38
は、リサイズメソッドのコードがありますそれについて行うことができます。
私はNDocを直接使用していません。それを使用するCanvasです。また、私はスレッドに注意しています。私はそれが問題だとは思わない。しかし、私はそれが問題になる可能性のあるものがあるかどうかを再度チェックする。スレッドプールには最大1000個のスレッドがキューイングされていることがあります。そのような場合は、たまにはまれにしか発生しません。 – Swippen