2011-05-22 108 views
1

我有一個C#中的應用程序,它不應該保留太多的內存。可執行文件是〜100Kb,整個應用程序有幾千行代碼。
它是主要組件,有一個計時器負責創建事件(具有幾個屬性的類的實例)並將它們發送到此http://timeline.codeplex.com/。時間線接受事件的方式是調用ResetEvents函數並傳遞事件列表。因爲我有一個計時器,所以我把它放在計時器的代碼中。
像這樣運行它,應用程序達到300Mb的內存,我只是結束它,以避免崩潰。如果我從計時器中刪除了ResetEvents的調用,那麼應用程序運行更平穩,消耗60-70Mb。沒有時間線的應用程序應該運行在10-20Mb。沒有任何圖形或任何可能比這更多的東西。我的猜測是,時間軸上可能有些問題。在C#中的應用程序的內存問題Windows窗體

編輯:

下面的代碼的一部分:

List<TimelineEvent> events = new List<TimelineEvent>(); 

...

內部定時器

TimelineLibrary.TimelineEvent newevent = new TimelineLibrary.TimelineEvent(); 
... 
newevent.StartDate = starttime; 
newevent.EndDate = endtime; 
newevent.Id = id; 
newevent.Title = title; 
newevent.Description = description; 
newevent.Link = url; 
newevent.EventColor = color; 

events.Add(newevent); 

timeline.ResetEvents(events); 

...

此代碼是在時間內河我只是創建一個TimelineEvent,將它添加到列表並調用ResetEvents。刪除最後一行,不會導致內存問題。

+2

你的問題是什麼? – Cheeso 2011-05-22 17:17:30

+3

聽起來像你應該發佈一些代碼,也聽起來像你有一個manged泄漏... – Stormenet 2011-05-22 17:18:34

+0

1.任何線索有什麼不對? 2.是否確定時間表有問題,還是有其他事情發生?3.使用該時間表的人,是否遇到過類似的問題? – user579674 2011-05-22 17:20:23

回答

2

由於很難看到你的問題是沒有更多的代碼,我建議嘗試某種內存分析器來定位內存分配的位置和時間。

試試例RedGates Memory Profiler,他們有一個基於時間的試驗。
請按照此walk-through加快速度並瞭解如何尋找和如何。

有關.NET內存分析器的更多選項,請參閱this thread

祝你好運!

+0

謝謝。我會嘗試你的建議並看看。 – user579674 2011-05-22 19:39:28

0

您傳遞給ResetEventsevents變量的類型是什麼?

在沒有看到代碼的情況下,我可以在你發佈的內容中唯一可疑的行爲是,ResetEvents方法並不能真正清除它收到的集合,而是在timeline變量的狀態上做了某些事情。

使用內存分析器是一個好主意。如果您希望這裏的人能夠幫助您找到內存泄漏,請發佈更多代碼。理想情況下,您可以用最少的代碼重現問題,然後發佈。

+0

它們的類型是時間軸中定義的TimelineEvent。自從我將時間線作爲庫導入後,我不知道ResetEvent的作用。 – user579674 2011-05-23 08:24:15

相關問題