none
asp.net 多线程使用webbrowser做网页快照报内存损坏的问题

    问题

  • private void _sg()
    {
       WebBrowser m=new WebBrowser ();
       m.Navigate(url);
      while(m.ReadyState!=WebBrowserReadyState.Complete)
    {
      Delay(500);//交出cpu执行权
    }
      T(m); //截图的方法 
    m.Displose();
    m=null;
    
    }
    
    

    的操作是在下面T的方法里来处理的, 但是偶尔会在 m.ReadyState!=WebBrowserReadState.Complete 这个位置报错(大概意思就是说  尝试读去只读的或被保护的内存,通常这种提示是因为内存损坏)  ,这里是用多线程调用这个方法的,查过资料 该错误正常请况try捕获不到 ,就算设置好捕获到了程序异常后也不能正常处理了 请问怎么处理?

        另外还有一个问题就是 这里因为生成的是一个内存图,所以 当同时截取700张图片的时候就内存溢出了(我的电脑4G内存) 就相当于每个线程结束后 内存没有被释放(图片保存后调用了dispose方法 并且将用过的对象都设为null了)

    2016年5月22日 0:44

答案

  • 尝试读去只读的或被保护的内存,通常这种提示是因为内存损坏

    这种情况,有可能是内存用完了,你用Red Gate生产的ANTS Performance Profiler 8监测一下程序的内存使用情况

    还有监测下文件I/O,这样应该很容易定位到具体的代码行。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年5月23日 2:16

全部回复

  •  T(m); //截图的方法 

    可能是这里的方法的问题,FileStream或File (截取700张图片)保存到本机后,没有调用dispose或是用using(FileStream ...) 释放


    专注于.NET MIS开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年5月22日 11:05
  • 在那个方法里直接调用了m.DrawToBitmap()这个方法把页面保存为一张图片并返回出去了,返回后是直接保存并释放的操作同事也置为了null在完成后调用了gc的回收机
    2016年5月23日 0:49
  • 尝试读去只读的或被保护的内存,通常这种提示是因为内存损坏

    这种情况,有可能是内存用完了,你用Red Gate生产的ANTS Performance Profiler 8监测一下程序的内存使用情况

    还有监测下文件I/O,这样应该很容易定位到具体的代码行。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年5月23日 2:16