使用GDI+绘图new Bitmap()的时候出错,

大山里的松 2007-08-13 12:34:51
这是一个asp.net的应用,并且将网站的bin\*.dll都更新后需要过好长一段时间才出现无法new bitmap() 的错误,未将对象引用设置到对象实例。

我尝试在一个测试程序中用循环来不停的new bitmap()但是除了把iis崩溃掉以外并没有出现仅仅是无法画图而其他都正常的情况。

这个困扰了我很久,因为我在本机调试的时候从来不出错,放到远程服务器上积累一段时间才会出错,敬请高手们指教 分不够可以另外开帖子加分

具体代码如下,创建的位图稍微有些大5000x3000像素,

Bitmap bm = null;
Graphics g = null;

try
{

bm = new Bitmap(this.width, this.height);
g = Graphics.FromImage(bm);
g.CompositingQuality = CompositingQuality.HighQuality;

DrawPanel(g);
this.DrawFrame(g);
this.DrawTitle(g);

if (this.isDrawBackground) DrawBackground(g);

DrawYieldChart(g);
DrawLegend(g);
HttpContext hc = HttpContext.Current;

System.IO.MemoryStream memStream = new System.IO.MemoryStream();
bm.Save(memStream, System.Drawing.Imaging.ImageFormat.Png);
hc.Response.OutputStream.Write(memStream.ToArray(), 0, (int)memStream.Length);

}
finally
{
g.Dispose();
bm.Dispose();
}
...全文
445 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
baibai65 2008-05-12
  • 打赏
  • 举报
回复
如何解决的楼主是否可以分享一下.
nextflying 2007-08-27
  • 打赏
  • 举报
回复
bm。delete()??
大山里的松 2007-08-24
  • 打赏
  • 举报
回复
问题解决,散分啦~~·
xwdd129 2007-08-24
  • 打赏
  • 举报
回复
接一个
  • 打赏
  • 举报
回复
GDI+会出现这样问题,你以前drawstring的时候居然运行几次就出错了,最后,发现读取font的高时运行几次就不行了

建立楼主多单步调试,查看分析错误信息
大山里的松 2007-08-14
  • 打赏
  • 举报
回复
对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象,可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。



对于非托管资源,您在应用程序中使用完这些非托管资源之后,必须显示的释放他们,例如System.IO.StreamReader的一个文件对象,必须显示的调用对象的Close()方法关闭它,否则会占用系统的内存和资源,而且可能会出现意想不到的错误。



我想说到这里,一定要清楚什么是托管资源,什么是非托管资源了?



最常见的一类非托管资源就是包装操作系统资源的对象,例如文件,窗口或网络连接,对于这类资源虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但它不了解具体如何清理这些资源。还好.net Framework提供了Finalize()方法,它允许在垃圾回收器回收该类资源时,适当的清理非托管资源。如果在MSDN Library 中搜索Finalize将会发现很多类似的主题,这里列举几种常见的非托管资源:ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader
,Pen,Regex,Socket,StreamWriter,Timer,Tooltip 等等资源。可能在使用的时候很多都没有注意到!



关于托管资源,就不用说了撒,像简单的int,string,float,DateTime等等,.net中超过80%的资源都是托管资源。
大山里的松 2007-08-13
  • 打赏
  • 举报
回复
忘了说,我开始也是怀疑是内存的问题,但是将系统从老服务器迁移到新服务器上还是出问题
老服务器内存是1G的,新服务器内存是3G的
csShooter 2007-08-13
  • 打赏
  • 举报
回复

需要进行压力测试!

写一个log每次new Bitmap时把内存使用情况保存下来~~
csShooter 2007-08-13
  • 打赏
  • 举报
回复
先up

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧