【问题标题】:VB6 Memory LimitationsVB6 内存限制
【发布时间】:2017-11-29 11:04:03
【问题描述】:

我目前支持在多台服务器上运行的 VB6 应用程序(我们正在替换它,但这是一个缓慢的过程!)。谁能告诉我VB6进程可以处理的最大内存量是多少?我们使用多种操作系统:

  • Windows Server 2003 32 位
  • Windows Server 2008 64 位
  • Windows Server 2008 R2 64 位

我尝试过使用这样的资源: https://blogs.msdn.microsoft.com/tom/2008/04/10/chat-question-memory-limits-for-32-bit-and-64-bit-processes/

但我怀疑这是否准确,因为它讨论了基于 .NET 的应用程序,但是我找不到比这更重要的内容了。

【问题讨论】:

  • @Plutonix:虽然您的链接很棒(感谢它),但我没有找到 32 位进程的 2GB 的答案。并且这个 2 GB 限制(从未测试过 3GB 开关)适用于 32 位应用程序(VB6 是 32 位),即使操作系统可以处理更多(正如您从 64 位操作系统中知道的那样)
  • 有趣的问题。为什么不写一个函数来确认呢?
  • @VanquiishedWombat 我什至没有 VB6 IDE。这不是我们有源代码的应用程序。我通过管理应用程序的输入来救火。
  • @Paul 抱歉没有从你的描述中得到。

标签: memory vb6


【解决方案1】:

很难把这些“如果超人与上帝打架怎么办”的问题看得太严肃。早在这成为问题之前,您应该已经从内存驻留数据结构转移到磁盘文件或数据库。

但是,即使没有与 /LARGEADDRESSAWARE 链接并启动到 3GB 模式,VB6 程序也可以在 32 位 Windows 上处理相当多的数据。

Option Explicit

Private Sub Main()
    Const MAX_BYTES As Long = &H63700000
    Dim Bytes() As Byte

    ReDim Bytes(MAX_BYTES)
    Bytes(MAX_BYTES) = 255
    MsgBox "Success" & vbNewLine & vbNewLine _
         & "Bytes(MAX_BYTES) = " & CStr(Bytes(MAX_BYTES)) & vbNewLine & vbNewLine _
         & "MAX_BYTES = " & Format$(MAX_BYTES, "#,##0")
End Sub

结果:

Success

Bytes(MAX_BYTES) = 255

MAX_BYTES = 1,668,284,416

链接的博客文章正确地指出了 .Net 进程的局限性以及它们无法处理使用大量数据的问题。像 .Net 这样的脚本引擎并不是为这些东西而构建的,而且不要低估庞大的库的开销,即使是最简单的 .Net 程序也会拖入其地址空间。

【讨论】:

  • 我怀疑应用程序没有正确释放内存。这不是一个假设,而是一个实际问题,我正在与一个已停业供应商的应用程序进行交火。
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 2019-05-30
  • 2010-10-20
  • 1970-01-01
  • 2010-09-26
  • 2014-07-16
  • 2011-02-25
  • 2012-01-04
相关资源
最近更新 更多