首页 新闻 会员 周边

Quartz,设置每隔3小时调用job ,引发类型为“System.OutOfMemoryException”的异常

0
悬赏园豆:10 [已解决问题] 解决于 2017-10-30 14:28

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;        
}    
}

lwr的主页 lwr | 初学一级 | 园豆:48
提问于:2017-10-27 09:12
< >
分享
最佳答案
0

Files.GetWebPage  这个类型是否实现了接口 IDisposable ,如果是的话,那就需要用完了就释放。要不然会溢出。using语句,包裹那个实现了IDisposable的资源。用了会自动释放。

收获园豆:10
海尔卡特 | 菜鸟二级 |园豆:212 | 2017-10-27 11:17

请再帮忙看看,谢谢!

lwr | 园豆:48 (初学一级) | 2017-10-27 11:29

@lwr: 

using (MyFileStream fs1 = new MyFileStream())
{
    using (MyFileStream fs2 = new MyFileStream())
    {
        fs2.Write(333);
        fs1.Write(5);
    }
}
不是用close, 用dispose()  . 或者using。 用法就是上面这种用法。大括号包裹
海尔卡特 | 园豆:212 (菜鸟二级) | 2017-10-27 11:35

@安追梦: 

你好,这边直接调用dispose(),这样可以吗?

// reader.Close();
            reader.Dispose();
           // dataStream.Close();
            dataStream.Dispose();
           // response.Close();
            response.Dispose();

 // swstream.Close();
            swstream.Dispose(); 

lwr | 园豆:48 (初学一级) | 2017-10-27 13:04

@lwr: 你不明白using的用法吗?百度一下吧,搞那么复杂。using的底层实现,其实就是try  ..... finally{Dispose()}   。你这样子写,容易乱。知道不。 为什么说要用using。就是为了代码逻辑清晰。不至于产生bug,很多时候写代码要养成习惯啊。 更简洁,更省事的写法就是using。而且你那个类型,是否继承了IDisposable接口,只有继承了这个接口的才能去释放。 为什么别人问你这个类型是什么类型,就是这个原因。别人是想了解下。你这个类型是否可以Disposable.

海尔卡特 | 园豆:212 (菜鸟二级) | 2017-10-27 14:08
其他回答(3)
0

Files的类型是什么?

dudu | 园豆:30994 (高人七级) | 2017-10-27 09:27

请再帮忙看看,谢谢!

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

@lwr: 建议使用using

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2017-10-27 11:30
0

整个代码呢?你这一坨没头没尾看不出来

Daniel Cai | 园豆:10424 (专家六级) | 2017-10-27 09:34

请再帮忙看看,谢谢!

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

@lwr: 你给的除了要用using外没别的了,但这里不是导致你outofmemory的原因。你最好看看其他代码。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-10-27 12:12
0

内存溢出了,能否定时清理内存

大宇007 | 园豆:331 (菜鸟二级) | 2017-10-27 11:14

请再帮忙看看,谢谢!

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