我们正在使用WPF库来调整上传到MVC操作的图像的大小,并且我们会定期收到错误消息,说明"操作已成功完成"。错误发生在"新的DrawingVisual()"以下代码中的行。
public static BitmapFrame ResizeWithExcess(this BitmapFrame photo, int width, int height)
{
double dpiX = photo.DpiX == 0 ? 96 : photo.DpiX;
double dpiY = photo.DpiY == 0 ? 96 : photo.DpiY;
var targetVisual = new DrawingVisual();
using (var targetContext = targetVisual.RenderOpen())
{
targetContext.DrawRectangle(Brushes.White, null, new Rect(0, 0, width * 96 / dpiX, height * 96 / dpiY));
var x = ((width - (photo.Width * dpiX / 96)) / 2) * 96 / dpiX;
var y = ((height - (photo.Height * dpiY / 96)) / 2) * 96 / dpiY;
var w = photo.Width;
var h = photo.Height;
targetContext.DrawImage(photo, new Rect(x, y, w, h));
targetContext.Close();
}
var target = new RenderTargetBitmap(width, height, dpiX, dpiY, PixelFormats.Default);
target.Render(targetVisual);
var targetFrame = BitmapFrame.Create(target);
if (targetVisual.Dispatcher != null) targetVisual.Dispatcher.InvokeShutdown();
return targetFrame;
}
根据任务经理的说法,w3wp进程的句柄数量大约为35k。线程数约为270," GDI"我已经尝试强制调度程序在BitmapFrame.Create(目标)之后启动关闭,并且还添加了GC代码,但这些似乎没有任何区别。现在唯一的解决方案是回收应用程序池。
我已经完成了一些谷歌搜索,而且我所看到的主要是针对桌面应用程序或WPF XAML控件的WPF应用程序。请注意,如果您想查看调用此方法的任何代码,我可以提供。我基本上使用了几个任务来同时创建了许多已调整大小的版本,并且我正在使用" await"观察他们完成。我也尝试过处理这项任务,而且似乎根本没有做任何事情。
编辑:我们还看到了一个错误,上面写着"没有足够的存储空间来处理此命令"有时会出现在"流程成功完成之前"错误。