首页 新闻 会员 周边

C# System.OutOfMemoryException

1
悬赏园豆:5 [已关闭问题] 关闭于 2017-11-03 13:20

写了一个定时器,在每隔1小时,需要调用下面的方式,每次调用该方法,可能要调用上百次。但该定时器执行了多次之后,就报"System.OutOfMemoryException" 异常。 请问如何解决?

谢谢!

public class Files     {

        public static string GetWebPage(string url, string indata, string dataurl, Encoding encoding)         {            

string responseFromServer = null;            

try            

{                

string postData = indata;                

byte[] byteArray = encoding.GetBytes(postData);

 WebRequest request = WebRequest.Create(url);                

request.Method = "POST";                

request.ContentType = "text/xml";                

request.ContentLength = byteArray.Length;

   Stream dataStream = request.GetRequestStream();                

dataStream.Write(byteArray, 0, byteArray.Length);                

dataStream.Close();

   WebResponse response = request.GetResponse();                

dataStream = response.GetResponseStream();                

StreamReader reader = new StreamReader(dataStream);   

responseFromServer = reader.ReadToEnd();                 

reader.Close();                 

dataStream.Close();                 

response.Close();

            }            

catch (Exception ex)            

{                

StreamWriter excptswstream = new StreamWriter("c:\\11.txt", false, System.Text.Encoding.Default);                

excptswstream.Write("数据读取错误:========"+ ex.Message);                  excptswstream.Close();

                return "数据读取错误";            

}

            return responseFromServer;         }     }

lwr的主页 lwr | 初学一级 | 园豆:48
提问于:2017-10-30 14:31
< >
分享
所有回答(4)
0

内存溢出,是不是因为dataStream没有dispose?

新的开始 | 园豆:679 (小虾三级) | 2017-10-30 17:27

之前已经改成dispose ,还是有这个问题

支持(0) 反对(0) lwr | 园豆:48 (初学一级) | 2017-10-31 10:44
0

 dataStream.Close(); 这种写法建议换成Using()这样的话,在报错后依然可以关闭连接。

StreamWriter excptswstream = new StreamWriter("c:\\11.txt", false, System.Text.Encoding.Default); 
excptswstream.Close();              
如果是多线程的运行的话,这行代码也可能导致流没有正确关闭

看代码的话,这个方法造成内存溢出的几率比较小,检查下其他代码有没有地方会造成资源未释放,频繁创建对象问题。

可以在异常的时候Dump看一下。

大壮他哥 | 园豆:11 (初学一级) | 2017-10-31 11:22
0

最后实在不行,强制回收,但不建议这样做,会造成GC处理混乱。 服务器的内存有多大?

Lionel Andrés Messi | 园豆:82 (初学一级) | 2017-10-31 12:59

8G的内存,理论上应试够用了吧?

支持(0) 反对(0) lwr | 园豆:48 (初学一级) | 2017-11-01 12:15
0

你的上百次是异步还是同步的?

萨尔 | 园豆:20 (初学一级) | 2017-10-31 15:00

做的是一个C/S版的定时工具,在每隔1小时就要调用作业。每次调用作业,上面这个方法被调用上百次。
所以当作业调用多次之后就报引发类型为“System.OutOfMemoryException”的异常。

这问题该如何解决?

支持(0) 反对(0) lwr | 园豆:48 (初学一级) | 2017-11-01 12:20

需不需要把GetWebPage改为实例方法,而非静态方法?
是不是这个静态方法被调用几百次后无法释放资源,最后导致内存溢出?

请各位帮忙看看呢,谢谢!

支持(0) 反对(0) lwr | 园豆:48 (初学一级) | 2017-11-01 12:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册