【发布时间】:2013-01-04 10:07:25
【问题描述】:
我们有一个应用程序存在一些有趣的内存使用问题。首次打开时,该程序使用大约 50-60MB 的内存。这在 32 位机器上保持一致。然而,在 64 位机器上,以任何方式(单击、拖动、alt-tabbing 等)重新激活表单都会增加大约 50MB 的内存使用量。它会重复此过程几次,然后重置回 45MB 左右,此时循环再次开始。
我做了一些研究,很多人都说 VB 的垃圾收集能力很差,这可能会在某种程度上影响软件。但是,我还没有找到解决方案。激活应用程序时不会触发任何事件(如 32 位使用所示) - 应用程序只是等待用户的操作。
在加载时,系统将一些数据拉入树视图,但这是唯一的外部连接,并且只有在用户对某些内容进行更改并保存更改时才会重新启动例程。
有没有其他人经历过这种奇怪的事情,如果有,有没有人知道什么可以解决它?似乎很奇怪,它只发生在 x64 系统下。
【问题讨论】:
-
VB(.Net) 没有任何垃圾收集。它是具有 GC 的 CLR。如果您运行 VB、C#、F# 或任何应用程序,它就不起作用。 GC 始终相同。
-
您是否使用任何自定义控件,因为它可能是绘制事件的问题?
-
@John 我们使用 Janus Grid 来显示大部分信息。我只是觉得奇怪的是 32 位版本可以,但 64 位版本不行。
-
AFAICR 在 VB.Net 程序的调试版本中存在内存管理错误。另外:这种行为实际上是一个问题吗?垃圾收集器仅在认为内存不足时才回收内存。如果系统有足够的内存来正常运行,也许你不应该担心这种行为。
-
这里的实际问题是什么?当然,64 位应用程序总是比 32 位应用程序使用更多的内存。只要 GC 收集垃圾并且您的程序在运行时间足够长时不会消耗千兆字节,这些都不是问题。
标签: vb.net