VB6 Maximum Size of an Array
尊敬的StackOverflow用户!
我最近遇到了解决VB6问题的不寻常需求。我开发了一个应用程序,需要将大量数据临时存储到内存中。由于班级和班级成员讨论了更多的资源,而更重要的是需要更多的时间来卸载,因此我想到了使用数组的想法。但是,似乎无法使用计算机上的所有可用RAM。任何人都可以给我一个解决方法的想法吗?
谢谢!
- 我有同样的问题,就我而言,将数据拆分成多个较小的数组是不值得的,因为它需要重写大量的代码。也许在您的情况下,它是很简单的。至少我可以确认数组的最大大小比计算机中的可用RAM小得多。这并不奇怪,因为内存管理器必须找到连续的空闲内存块,这种情况很少见。但是VB6似乎还有一个额外的人为限制。
-
您能否将数据写入文件(可能是xml,csv或其他文件),而不是创建数组?
-
不幸的是,将数据写入文件是行不通的,因为我需要处理数组中包含的信息。而且这在内存中比在磁盘上快得多...
-
实际上,我非常确定VB6阵列可以存储的内存与VB6可以寻址的内存一样多:2 GB。 (或者是4GB?)AFAIK,没有64位版本的VB6。如果您需要更多,只需升级到VB.Net。
VB6中的数组大小限制是有符号32位整数或2,147,483,647个元素的最大值。
这实际上应该足以覆盖32位程序的完整地址空间,但这不太可能使用运行64位OS的现代计算机的完整RAM分配。
您是否考虑过用支持64位地址空间的另一种语言编写此处理步骤,而只是从VB6程序中执行该程序?
我实际上遇到了VB3的相同问题,它只允许2 ^ 15-1个元素大的数组,这确实是一个阻力-少于33,000个元素使许多系统的内存排序不切实际。
- 在解决这个问题上,我确实遇到了两个非常有趣的问题。例如,假设有15,000,000个固定大小的String数组,则Dim A(15000000)将其创建为String毫无问题。但是,真正的问题出在填充数组时。如果元素长度足够短,则没有问题。但是,当它们接近255个字符时,程序将停止。如果有人可以对此发表评论,那就太好了。还是我再问一个问题?
-
VB6中的字符串是结构-因此,当您创建一个数组来保存它们时,不会为它们分配内存。相反,您得到的是一个空指针数组(它们在内部是BSTR结构,msdn.microsoft.com / zh-cn / library / windows / desktop /…);为了方便起见,我认为VB6只是将空字符串指针与空字符串等效。分配字符串时,BSTR结构将占用更多内存。
这取决于您所说的"计算机上的所有RAM"的含义。如果您使用的是32位VB6编译器,则只能使用2G RAM作为标准,因为这是VB6一次可寻址的最大内存量。使用EDITBIN.EXE可能会在/ 3G Windows或Win64机器上破解可执行文件以利用3G,但是如果它起作用我会感到惊讶。
您最好的选择是将数据写入临时文件。您应该使用WinFile调用CreateFile()/ ReadFile()进行文件访问,因为VB6在文件大小上具有相同的2G限制。