我有应用程序写在c#上,它使用很少的计时器(4个计时器)。应用程序请求来自web服务的相应时间间隔的响应。如果互联网连接应用程序使用12-15 Mb内存,但当互联网断开应用程序增加内存使用量(每秒3MB)。计时器进食记忆(3MB秒)
我强制运行垃圾收集器但没有改进。 当互联网断开连接发生一些例外,但他们都妥善处理。
这是我的代码的一部分,如果互联网断开连接,并调用shn.show * Details()方法增加内存使用GetXML.GetResponce()那么调用webservice上paramitter并返回答复xml作为字符串,ParseXML类做以上返回的xml respnce解析并将其转换为对象
class Scheduler
{
private System.Windows.Forms.Timer dataTimer;
private System.Windows.Forms.Timer promoTimer;
private showNotifications shn;
public Scheduler()
{
dataTimer = new System.Windows.Forms.Timer();
promoTimer = new System.Windows.Forms.Timer();
shn = new showNotifications();
}
public void scheduleDmsg(int time)
{
if (time < 1)
{ time = 5; }
dataTimer.Interval = time * 60000;
dataTimer.Tick += new EventHandler(InitDmsg);
dataTimer.Enabled = true;
}
public void schedulePmsg(int time)
{
if (time < 1)
{ time = 5; }
promoTimer.Interval = time * 60000;
promoTimer.Tick += new EventHandler(InitPmsg);
promoTimer.Enabled = true;
}
private void InitDmsg(Object source, EventArgs e)
{
try
{
//--------------------at the start of app------------------
showNotifications shn = new showNotifications();
HandleUserData hud = new HandleUserData();
Userinfo uin = hud.ReadUserData();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = GetXML.GetResponse(new Uri("auth service url"));// this web service use to authenticate user by ip address
Auth authDetails = ParseXML.ParseAuth(xmlDoc);
try
{
if (authDetails.SUB.Equals("no_entry")) // if authenicated no_entry become >> <11 digit number>
{ }
else
{
//if authenticated
xmlDoc.InnerXml = GetXML.GetResponse(new Uri("info url"));
Pre preDetails = ParseXML.ParsePre(xmlDoc);
switch (preDetails.SUB_TYPE)
{
case "1":
shn.showPreDetails(); //showPreDetails method display some information on cusom notification message
break;
case "2":
shn.showPostDetails();//showPostDetails method display some information on cusom notification message
break;
case "3":
shn.showPreDetails();
break;
case "4":
shn.showPreDetails();
break;
case "5":
shn.showPostDetails();
break;
default:
break;
}
}
}
catch (Exception ex)
{
//MessageBox.Show("Error Occured");
}
}
catch (Exception ex)
{
}
}
private void InitPmsg(Object source, EventArgs e)
{
//shn.showPromoMsgs();
showNotifications.showPromoMsgs(); ////showPromoDetails method display some information on cusom notification message
}
}
你将不得不张贴一些代码给我们看看发生了什么。最有可能的是,由于悬挂引用对象导致内存泄漏。强制GC运行并不能解决这个问题。 –
方法'scheduleDmsg'多久使用一次?它在每次通话中订阅Tick事件。是否有任何事情释放订阅?在应用程序的form_load中调度scheduleDmsg和schedulePmsg一次,调用时间为 –
。 –