【问题标题】:VB.Net Memory IssueVB.Net 内存问题
【发布时间】: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


【解决方案1】:

开始寻找导致泄漏的原因的最佳方法之一是使用分析工具。

http://www.jetbrains.com/profiler/

这些人有 10 天的免费试用期,通常足以找出导致您问题的代码区域。

【讨论】:

    【解决方案2】:

    这听起来根本不是问题。如 cmets 中所述,64 位程序将使用更多内存。该应用程序不会使用太多内存,并且会在一段时间后恢复。 VB.net 没有“非常糟糕的垃圾收集”,它使用与 C# 相同的收集器,即 CLR 的收集器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-22
      • 2014-12-19
      相关资源
      最近更新 更多