무작위로 (라이브 환경에서 매우 적극적이고 열심히 작동하는 Windows 서비스로 2 주마다 한 번씩 약 50000+ 이미지의 크기가 조정됩니다.) AccessViolationException : 보호 된 메모리를 읽거나 쓰려고했습니다. . 이것은 종종 다른 메모리가 손상되었다는 표시입니다.보호 된 메모리를 읽거나 쓰려고 시도했습니다. Websupergoo의 예외 ABCPDF7 처분시
스택 트레이스는 다음과 같습니다 스택 : 여기
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
가 크기 조정 방법에 대한 코드입니다 :
아무것도 I가있는 경우
사람이 나를 내가이 오류가 왜 해결하거나 도와 줄 수
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
}
그것을 할 수 있습니다.
NDoc을 사용하지 않습니다. 직접 사용하는 캔버스입니다. 또한 스레딩에 관해서도주의를 기울였습니다. 나는 이것이 문제라고 생각하지 않는다. 그러나 문제가 될만한 것이 있다면 그것을 다시 점검 할 것이다. 그 이상한 일이라면 그 이상한 일이 일어난다는 것이 이상합니다. 스레드 풀에 최대 1000 개의 스레드가 대기 할 수 있으며, 때로는 rarly보다 더 많은 충돌이 있어야합니다. – Swippen