C#工程中,Quartz定时调度job,设置每隔3小时执行作业,定时向第三方系统推送信息。在执行到一定时间后报引发类型为“System.OutOfMemoryException”的异常。 请各位帮忙看看,该问题如何解决。谢谢!
推送的日志文件信息如下:
2017-10-26 14:57:10 服务启动 2017-10-26 15:00:09 成功推送了信息!
2017-10-26 18:00:08 成功推送了信息!
2017-10-26 21:00:28 成功推送了信息! 2017-10-27 00:00:03 成功推送了信息!
2017-10-27 03:00:00 异常信息============引发类型为“System.OutOfMemoryException”的异常。
2017-10-27 03:00:02 成功推送了材料计划!
推送信息代码如下:
void SendMess(string username)
{
try
{
string ToUserName, content, title, url;
ToUserName = username;
content = CGlobal.IndexAddr;
title = "";
url = "";
Files.GetWebPage(CGlobal.webServiceAddr + "?ToUserName=" + ToUserName + "&content=" + content + "&title=" + title + "&url=" + url + "", "您好!", "", Encoding.UTF8);
CFile.WriteLog("成功推送了信息!");
}
catch (Exception ex)
{
CFile.WriteLog("异常信息============" + ex.Message);
}
}
请各位帮忙再看看,谢谢!
Files.GetWebPage 方法代码如下 :
public class Files {
public static string GetWebPage(string url, string indata, string dataurl, Encoding encoding)
{
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);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
StreamWriter swstream = new StreamWriter("c:\\1.txt", false, System.Text.Encoding.Default);
swstream.Write(responseFromServer);
swstream.Close();
return responseFromServer;
}
}
Files.GetWebPage 这个类型是否实现了接口 IDisposable ,如果是的话,那就需要用完了就释放。要不然会溢出。using语句,包裹那个实现了IDisposable的资源。用了会自动释放。
请再帮忙看看,谢谢!
@lwr:
@安追梦:
你好,这边直接调用dispose(),这样可以吗?
// reader.Close();
reader.Dispose();
// dataStream.Close();
dataStream.Dispose();
// response.Close();
response.Dispose();
// swstream.Close();
swstream.Dispose();
@lwr: 你不明白using的用法吗?百度一下吧,搞那么复杂。using的底层实现,其实就是try ..... finally{Dispose()} 。你这样子写,容易乱。知道不。 为什么说要用using。就是为了代码逻辑清晰。不至于产生bug,很多时候写代码要养成习惯啊。 更简洁,更省事的写法就是using。而且你那个类型,是否继承了IDisposable接口,只有继承了这个接口的才能去释放。 为什么别人问你这个类型是什么类型,就是这个原因。别人是想了解下。你这个类型是否可以Disposable.
Files的类型是什么?
请再帮忙看看,谢谢!
@lwr: 建议使用using
整个代码呢?你这一坨没头没尾看不出来
请再帮忙看看,谢谢!
@lwr: 你给的除了要用using外没别的了,但这里不是导致你outofmemory的原因。你最好看看其他代码。
内存溢出了,能否定时清理内存
请再帮忙看看,谢谢!