C#Windows窗体中应用程序的内存问题

C#Windows窗体中应用程序的内存问题,c#,winforms,memory-leaks,memory-management,timeline,C#,Winforms,Memory Leaks,Memory Management,Timeline,我有一个C#中的应用程序,它在不应该的时候保留了太多内存。可执行文件约100Kb,整个应用程序只有几千行代码。 它的主要组件,有一个计时器,负责创建事件(一个类的实例,有几个属性)并将它们发送到这个。时间轴接受事件的方式是调用ResetEvents函数并传递事件列表。因为我有一个计时器,所以我把它放在计时器的代码中。 像这样运行,应用程序的内存将增加到300Mb,我只是结束它以避免崩溃。如果我从计时器中删除ResetEvents调用,那么应用程序运行会更加平稳,消耗60-70Mb的内存。没有时间

我有一个C#中的应用程序,它在不应该的时候保留了太多内存。可执行文件约100Kb,整个应用程序只有几千行代码。
它的主要组件,有一个计时器,负责创建事件(一个类的实例,有几个属性)并将它们发送到这个。时间轴接受事件的方式是调用ResetEvents函数并传递事件列表。因为我有一个计时器,所以我把它放在计时器的代码中。
像这样运行,应用程序的内存将增加到300Mb,我只是结束它以避免崩溃。如果我从计时器中删除ResetEvents调用,那么应用程序运行会更加平稳,消耗60-70Mb的内存。没有时间线的应用程序应以10-20Mb的速度运行。没有比这更有用的图形或任何东西。我猜时间线可能有问题

编辑:

下面是代码的一部分:

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


此代码位于计时器内部。我只是创建一个TimelineEvent,将其添加到列表中并调用ResetEvents。删除最后一行不会导致内存问题。

由于没有更多代码很难看出问题所在,我建议尝试某种内存探查器来定位内存分配的位置和时间

例如,他们有一个基于时间的试验。
按照这一点,了解最新情况,了解寻找什么以及如何寻找

有关.NET内存探查器的更多选项,请参阅


祝你好运

传递给
ResetEvents
events
变量的类型是什么

在没有看到代码的情况下,我可以在您发布的内容中看到的唯一可疑行为是,
ResetEvents
方法可能没有真正清除它接收的集合,而是对
timeline
变量的状态做了一些事情


使用内存分析器是一个好主意。如果您希望这里的人帮助您查找内存泄漏,请发布更多代码。理想情况下,您可以用最少的代码重现问题,然后发布。

听起来您应该发布一些代码,而且听起来您有一个管理漏洞……1。有什么不对劲的线索吗?2.是否确定时间线有问题,或者是否有可能发生其他事情3。任何使用该时间线的人都会遇到类似的问题?我不能在这里发布2k行,但正如我所说的,问题是在计时器内一次又一次地调用ResetEvents。其他一切都与时间线无关,唯一相关的是时间线事件列表(由时间线本身定义)。因此,在计时器内部,我只是创建一个新事件,将其添加到列表中并调用ResetEvents。。也许我的问题是特别的,并且与提到的时间线有关,所以熟悉它的人会知道我在说什么。如果你确实有内存泄漏,唯一的办法就是检查源代码。从我坐的地方看不到你的屏幕。你希望得到什么样的答案?你应该发布一个事件的概要。你发布的代码完全是无关的和无辜的。谢谢。我会试试你的建议,看看。它们的类型是时间表中定义的TimelineEvent。我不知道ResetEvent做什么,因为我将时间线作为库导入。
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);