C# 线程中的System.OutOfMemoryException

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

我有个问题。这部分代码在~1分钟
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;
    }