【发布时间】:2019-01-17 08:37:36
【问题描述】:
当我声明一个新的字节数组时,内存使用量并没有增加。
byte[] test = new[1024*100];
只有在我遍历每个字节后它才真正开始占用内存。
我怎样才能让它实际提交内存而不必先使用它?
我将此用作带有 try catch 块的测试,以查看它是否无法分配内存,从而告诉我我的应用程序内存不足,不应尝试分配任何新对象。
编辑:由于我将要分配的对象与垃圾收集器和堆栈一起使用,我不想使用 malloc 进行分配,因为它可能在那里成功,但在尝试分配新的托管对象时失败。
【问题讨论】:
-
@maccettura 我不想要非托管内存
-
使用 Process Exporer 等特殊查看器,您会看到它确实分配了内存。它不会显示在提交中,但是一旦您迭代检查提交的内容就会上升。您不能为 1 个对象 IIRC 分配超过 2 GB 的空间
-
@John 你能不能试着改变最后一个元素的值来确保数组内存被分配??
-
@John 您实际上试图解决的问题是什么? (您的问题是基于一个错误的观察:内存实际上是在您创建数组时提交的,但这不是重点。)
-
@John 只是根据需要分配数组 - 如果内存不足,它将失败。数组被分配在一个连续的块中,因此请注意,您可能在几个较小的块中拥有足够的内存,但在单个大块中却没有。不过,您的问题听起来仍然像 X-Y 问题 - 如果您确定自己非常需要这么多内存,您应该保留它并使用您自己的内存管理器。
标签: c# arrays memory garbage-collection ram