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

Ele*_*ios 1 .net c# vb.net memory winforms

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

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

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

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

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

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

那么为了对另一种语言进行相同的测试,我选择了C++,因为另一个是重要的,我没有任何C/C++ IDE来编译,所以我做的是选择一些我在C /中制作的官方程序C++就像例如"Winamp",这次的结果是......在C/C++应用程序中移动鼠标时不会发生任何事情!内存消耗不增加,绝对零增加.

我用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

Ree*_*sey 7

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

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

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

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