当您运行 Visual Basic 2005 或 Visual Basic 2008 应用程序用于创建类的实例时,会增加内存使用情况

文章翻译 文章翻译
文章编号: 919481 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

症状

请考虑以下情形:
  • 在 Microsoft Visual Studio 2005 中或在 Visual Studio 2008 中,您可以创建 Microsoft Visual Basic 应用程序。
  • Visual Basic 应用程序包含一个类。
  • 此类包含一个事件。
  • Visual Basic 应用程序创建类的实例。
  • 编译 Visual Basic 应用程序在调试模式下。
在这种情况下在运行 Visual Basic 应用程序时增加了内存使用情况。

注意您将更有可能出现此行为,当满足下列条件都为真时:
  • Visual Basic 应用程序会连续运行很长时间。
  • Visual Basic 应用程序创建包含事件的类的许多实例。使用一个 OutOfMemoryException 或"内存不足"的实例创建足够次数,如果应用程序将最终失败错误。例如对于 Visual Basic 应用程序中包含循环,可创建的类的多个实例。

原因

由于编辑并继续调试功能在 Visual Studio 2005 中或在 Visual Studio 2008 中维护着一个对已创建的对象的弱引用的列表,则会发生此问题。如果已创建的对象是一个包含事件的类,该程序的持续时间为维护这些弱引用。此行为会增加内存使用情况。

解决方案

若要解决此问题,使用下列方法之一。

方法 1: 重新启动 Visual Basic 应用程序

您可以重新启动 Visual Basic 应用程序。执行此操作时被释放内存。

方法 2: 编译 Visual Basic 应用程序在释放模式

您可以在 Visual Basic 应用程序在释放模式中的进行编辑。在释放模式中运行已编译一个 Visual Basic 应用程序时, 创建一个包含事件的类的实例时不会增加内存使用情况。

更多信息

重现此问题的步骤

  1. 启动 Visual Studio 2005 或 Visual Studio 2008。
  2. 文件 菜单上指向 新建,然后单击 项目
  3. 项目类型 框中,单击 Visual Basic。如果您看不到该 vba 项目类型展开 其他语言,然后单击 Visual Basic
  4. 模板 框中,单击 控制台应用程序
  5. 键入项目的名称,然后单击 确定
  6. 在代码窗口中的所有代码都替换下面的代码
    Module Module1
    
      Private Sub CreateClassWithEvent()
        Dim TestClass As New CLeak
      End Sub
    
      Sub Main()               
        ' This loop infinitely creates a class that contains an event.
        While True
          CreateClassWithEvent()
          System.GC.Collect()
          System.GC.WaitForPendingFinalizers()
          Threading.Thread.Sleep(50)
        End While
      End Sub
    
    End Module
    
    Class CLeak
      Event myEvent()
    End Class
    
  7. 调试 菜单上单击 开始执行 (调试)。

属性

文章编号: 919481 - 最后修改: 2009年3月27日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft Visual Studio 2008 Standard Edition
  • Microsoft Visual Studio 2008 Professional Edition
  • Microsoft Visual Studio 2005 Team System Architect Edition
  • Microsoft Visual Studio 2005 Team System Developer Edition
  • Microsoft Visual Studio 2005 Team System Test Edition
  • Microsoft Visual Studio 2005 Team System Team Foundation:
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Visual Studio 2005 Professional
  • Microsoft Visual Studio 2005 Express Edition
  • Microsoft Visual Basic 2005
关键字:?
kbmt kbtshoot kbprb KB919481 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 919481
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com