只需移动鼠标,内存消耗就会持续增长

时间:2013-08-08 17:18:56

标签: c# .net vb.net winforms memory

今天我发现了一个奇怪的事情来试验有关内存消耗的事情,我无法在任何地方找到任何文档,但是确保所有开发人员都知道我想在这里谈论什么。

问题是......当您在VB或C#中编译默认的WinForms时,当您将鼠标移到窗体上时,该操作会导致内存消耗增加到大约每秒8-16 kb ... < / p>

最重要的是永远不会收集/释放内存!

因此,将鼠标移到窗体上的时间越长,生成的RAM消耗就越多,永远不会降低,从而可能导致StackOverFlow错误,这是我当务之急的主要原因......

我有一个WinForms应用程序需要保持运行数小时,鼠标需要每秒从一个点移动到另一个点,所以我需要执行一种方法来避免这种奇怪的内存消耗问题产生一个stackoverflow错误。

我在Java应用程序中测试了同样的东西,事情变得很糟糕!如果你将鼠标移到一个空窗口,那么你可以看到内存消耗每秒增加MB0s! ...而不是像VB / C#那样每秒几KB,就像在VB / C#Form中那样,内存永远不会停止,没有办法回归,人们对Java的看法以及该语言的内存消耗是真的。我觉得很糟糕。

然后对另一种语言进行相同的测试我选择了C ++'原因是另一种重要的,我没有任何C / C ++ IDE来编译所以我做的是选择我做的一些官方程序在C / C ++中,例如“Winamp”,这次的结果是......在C / C ++ APPS上移动鼠标时不会发生任何事情!内存消耗不会增加,绝对是零增加。

我在C#和VB中使用默认的Windows窗体应用程序(Empty Form1.vb Class)进行了此实验,但我只使用VB。我使用过.Net Framework 4.0和4.5。在Windows 8 x64中。

一些专家开发人员可以帮助我理解所有这些超自然事物吗?

·当在VB / C#WinForm中移动鼠标时,为什么内存在每秒8-16 kb之间上升。

·为什么内存的增加永远不会再次下降?

·为什么在C / C ++应用程序中不会出现同样的问题? (我可以理解C ++没有相同的引擎(Framework),但无论如何......我不知道是不是这个原因。)

最重要的问题......

·我可以防止在将鼠标移到窗体上时内存增加?,可能会覆盖一些原生方法或者......我不知道......有一种方法可以避免它吗?

  

更新:

我测量内存消耗的方式就像在TaskManager.exe中看到内存一样

我说“永远不会收集内存”的原因是因为当鼠标移动到表单上时,内存计数器不会在任务管理器上停止,永远不会。

  

更新2

我上传了一段解释问题的视频,你可以亲眼看到它! ......我不是疯了。

http://www.youtube.com/watch?v=sBxicL_x9HQ&feature=youtu.be

1 个答案:

答案 0 :(得分:7)

  

为什么在VB / C#WinForm中移动鼠标时,内存会在每秒8-16 kb之间上升。

有触发处理鼠标移动等的消息,这些消息由表单处理。

  

为什么内存的增加永远不会再次下降?

会的。最终,你会看到你的记忆稳定下来。在C#和VB.Net中,垃圾收集器不会立即清理内存(按设计),但会让它增长,并根据需要清理 。一般情况下,您会看到.NET应用程序的内存使用量增长,然后急剧下降,然后再次增长,然后再下降等等。如果您的系统中有大量内存,则“丢弃”很少发生,因为垃圾收集很昂贵,并且绝对没有使用其他地方不需要的内存