.net 系统图/GDI+;动态为web生成图形时出错
我正在为一家公司建立一个基于.NET的电子商务网站,该公司制作由客户在网站上实时创建的新奇标志。这个想法与一些你必须自己完成所有设计工作的网站有点不同——在这个网站上,基本上有一些标志组合成主题,带有预先确定的“文本区域”,客户在其中输入他们独特的文本。然后,我使用System.Drawing/GDI+在服务器端动态构建一个图形。我发现在生成了大约9000个图形后(这个数字可能无关紧要,可能与另一个操作操作有关),我得到了一个模糊的GDI+错误,整个网站都重置了。我想知道我是否应该使用更好的图形例程,因为我已经完成了我的代码,发布并清理了对象,缓存了图像,这样同一个图像就不会被反复处理,仍然会出现错误。无论我是一个接一个地(比如说几天)制作图像,还是作为一个大批量(有时会用于批量上传到其他在线商店)制作图像,都会发生这种情况 我在事件日志中看到的错误 故障应用程序w3wp.exe,版本7.0.6002.18005,时间戳0x49e023cf,故障模块gdiplus.dll,版本5.2.6002.18813,时间戳0x515ba857,异常代码0xc0000005,故障偏移量0x00104be6,进程id 0x1018,应用程序启动时间0x01ce82423201ac62 当然感觉像是记忆问题,但我找不到 我的代码包含许多组件,例如:.net 系统图/GDI+;动态为web生成图形时出错,.net,vb.net,gdi+,gdi,system.drawing,.net,Vb.net,Gdi+,Gdi,System.drawing,我正在为一家公司建立一个基于.NET的电子商务网站,该公司制作由客户在网站上实时创建的新奇标志。这个想法与一些你必须自己完成所有设计工作的网站有点不同——在这个网站上,基本上有一些标志组合成主题,带有预先确定的“文本区域”,客户在其中输入他们独特的文本。然后,我使用System.Drawing/GDI+在服务器端动态构建一个图形。我发现在生成了大约9000个图形后(这个数字可能无关紧要,可能与另一个操作操作有关),我得到了一个模糊的GDI+错误,整个网站都重置了。我想知道我是否应该使用更好的图形
- 从磁盘加载基本映像并将其大小调整为“工作”大小以进行操作
- 添加1-X条自定义文本(X由产品决定)
- 平滑文本并按比例缩放
- 每个自定义文本都可以有不同的字体、颜色等
- 这些文本中的每一条都可以有一个阴影(相同的文本,快速移动)
- 在添加文本后,用半透明图形覆盖整个图像,使其成为“天气”或“木纹”
欢迎您查看正在运行的站点-9000是一个神奇的数字,接近Windows规定的10000个句柄配额。查找程序中的GDI句柄泄漏。在taskmgr.exe、查看+添加列、GDI对象中可见。Dispose()你的系统。认真地画对象。同意。这几乎肯定是一个问题,您只是不处理您的GDI对象。Windows仅允许每个进程同时使用10000个GDI对象。确保您正在处理实现
IDisposable
接口的每个对象(例如位图、笔)。您可以通过调用Dispose
来实现,或者最好使用语句声明变量;我不知道有10000个手柄的配额。我将回顾所有代码,并检查taskmgr。我已经检查了代码,删除了所有额外的引用,然后向我使用的每个system.drawing对象以及具有Dispose方法的任何其他对象添加了.Dispose。它似乎工作得更好,我制作了10000多张图片,但后来又重新设置了。下面是任务管理器的屏幕截图:GDI对象位于右侧第二个,在整个过程中始终保持为0。内存使用后的数字是“句柄”,在500到700之间波动,但稳定在600左右。