我有應用程序寫在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一次,調用時間爲 –
。 –