多个Ajax请求引发的引发类型为“System.OutOfMemoryException”的异常。

qq_36246035 2016-09-26 04:42:16
Ajax代码如下:
public partial class test3 : System.Web.UI.Page
{
public static string htmlstr;
protected void Page_Load(object sender, EventArgs e)
{
string url = "";
if (Request.Form["url"] != null)
url = Request.Form["url"].ToString();
url = "http://item.jd.com/1557846746.html";//用于测试
ParameterizedThreadStart ps = new ParameterizedThreadStart(GetHtmlWithBrowser);
Thread t = new Thread(ps);
t.IsBackground = true;
t.ApartmentState = ApartmentState.STA;
t.Start(url);
Response.Write(htmlstr);

}


private static void GetHtmlWithBrowser(object url)
{
htmlstr = string.Empty;

WebBrowser wb = new WebBrowser();
wb.AllowNavigation = true;
wb.Url = new Uri(url.ToString());
DateTime dtime = DateTime.Now;
wb.ScriptErrorsSuppressed = false;
double timespan = 0;
while (timespan < 10 || wb.ReadyState != WebBrowserReadyState.Complete)
{
//Application.DoEvents();
System.Windows.Forms.Application.DoEvents();
DateTime time2 = DateTime.Now;
timespan = (time2 - dtime).TotalSeconds;
}

if (wb.ReadyState == WebBrowserReadyState.Complete)
{
string htmlstr1 = "";
htmlstr1 = wb.Document.Body.OuterHtml;

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstr1);

//var kwBox = doc.DocumentNode.SelectSingleNode("//div[@class='sku-name']");
var kwBox1 = doc.DocumentNode.SelectSingleNode("//div[@class='store-prompt']");

htmlstr = kwBox1.WriteContentTo();
}


//System.Runtime.InteropServices.Marshal.ReleaseComObject(wb.ActiveXInstance);
wb.Dispose();
}

}



怎么解决这个问题,单个Ajax请求没问题,但多个请求就会出现内存不足等情况,求高人
...全文
377 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
WebBrowser 的底层并不支持多(子)线程操作。你在创建的线程上声明 STA 模式,这并不能声明问题,以前的 asp.net 版本是靠将 AspCompat 属性设置为 true 来声明的。 基本上,你牺牲了 asp.net 应用的根本性能,来实现你的这个功能架构,比较混乱。 你应该使用一个 winform(或者wpf)程序来作为基础,然后在程序中使用 HttpListener 来实现 http post 服务(ajax调用),而不是使用 asp.net 为基础来设计这个架构。 或者,虽然使用 asp.net 网站作为“中转”,但是它访问另外一个 winform(或者 wpf)进程然后访问webbrowser 通讯。 总之,设计运用更大一点的架构知识,把 webbrowser 从 aps.net 中去掉。
worldy 2016-10-04
  • 打赏
  • 举报
回复
对象没有new
nonocast 2016-10-04
  • 打赏
  • 举报
回复
为什么要用WebBrowser做HTTP请求,直接HTTPRequest就好了。
正怒月神 2016-09-27
  • 打赏
  • 举报
回复
内存不够了啊。加内存,或者减少大并发的次数
Justin-Liu 2016-09-27
  • 打赏
  • 举报
回复
内存满了

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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