C# 线程中的System.OutOfMemoryException
我有个问题。这部分代码在~1分钟C# 线程中的System.OutOfMemoryException,c#,.net,C#,.net,我有个问题。这部分代码在~1分钟System.OutOfMemoryException错误后返回。但我找不到导致这个错误的确切原因。如果有人能告诉我这个问题的原因是什么,以及如何解决,我会很高兴 我的部分线程: public void Run(object client) { TextBox tbServerResult = (client as Client).Controls.Find("tbServerResult", true).SingleOrDefau
System.OutOfMemoryException
错误后返回。但我找不到导致这个错误的确切原因。如果有人能告诉我这个问题的原因是什么,以及如何解决,我会很高兴
我的部分线程:
public void Run(object client)
{
TextBox tbServerResult = (client as Client).Controls.Find("tbServerResult", true).SingleOrDefault() as TextBox;
Client tt = new Client();
for (int i = 0; i < 1; i--)
{
Thread.Sleep(10000);
string result = tt.SendGet("xyz" + tt.getToken() + "");
tbServerResult.AppendText(result);
}
}
您有一行
for(int i=0;i<1;i--)
这是无限循环。您有一行
for(int i=0;i<1;i--)
这是无限循环。您能指出哪一行引发异常吗?您还可以显示您正在请求的URL,而不是
reader.ReadToEnd()
我也没有看到任何可能的OutOfMemoryException候选项,但即使这样,如果在1分钟后下载完,也意味着下载速度相当快……看起来很像非GUI线程中的GUI操作。@MartinJames,这应该会导致不同类型的异常,尽管我同意后台线程上的AppendText
应该失败。因此,OutOfMemoryException可能在它实际尝试访问控件之前发生。另外,您正在创建多少个线程?另外,睡眠调用到底是怎么回事?只是调试?您能指出哪一行抛出异常吗?您还可以显示您正在请求的URL,而不是reader.ReadToEnd()
我也没有看到任何可能的OutOfMemoryException候选项,但即使这样,如果在1分钟后下载完,也意味着下载速度相当快……看起来很像非GUI线程中的GUI操作。@MartinJames,这应该会导致不同类型的异常,尽管我同意后台线程上的AppendText
应该失败。因此,OutOfMemoryException可能在它实际尝试访问控件之前发生。另外,您正在创建多少个线程?另外,sleep调用到底是怎么回事?只是调试而已?虽然你是对的,但我认为线程.sleep
意味着它不应该运行到足以在一分钟内获得内存不足异常的程度……代码中有一个“无限”循环,但是如果在大约1分钟后出现错误,那就不是问题。每10秒最多只执行1次迭代。如果你是对的,我认为线程.Sleep
意味着它不应该运行到足够的程度,在一分钟内出现内存不足异常…代码中有一个“无限”循环,但如果在大约1分钟后出现错误,那就不是问题所在。每10秒最多只执行1次迭代。
public string SendGet(string url)
{
string webpageContent = "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse())
{
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
{
webpageContent = reader.ReadToEnd();
}
//tbServerResult.AppendText("\r\n" + "Server code:" + webResponse.StatusCode + " Server status description:" + webResponse.StatusDescription);
webpageContent = "Server code:" + webResponse.StatusCode + " Server status description:" + webResponse.StatusDescription;
}
}
catch (Exception ex)
{
webpageContent = ex.Message;
}
return webpageContent;
}