创建大矩阵内存溢出怎么办?

时间:2022-09-08 02:14:32
由于需要同时对50张2456*2058的图片进行处理,需要创建一个Matrix<float>(2456*2058,50)的矩阵,只要new一下就引发类型为“System.OutOfMemoryException”的异常。我用的是64位win7系统,4G内存,在new之前查看性能里面,空闲内存至少1.5G,不能把这个矩阵拆分,请问该怎么办?难道真要放弃C#回到C++??

13 个解决方案

#1


回到C++,这么大的数组你依然无法创建
50张图片,你应该定义成图片格式啊,比如Image
然后循环图片里的像素进行处理
不要把所有像素都放到一个大数组里去

#2


能分开自然不会去创建那么大的数组了,关键有需要,不能分开啊。。

#3


为什么不能分开
到底是手段为目的服务,还是目的为手段服务?
不要把手段当成目的
能实现目的就行了,手段是可以变通的

#4


使用内存映射文件,这样就可以使用很大很大的空间了。

#5


我就是从单张图片组合到一起去的,你说我要是能分还用到这来问么?
这么说吧,这50张图片中所有的像素点就是一个样本集,我需要在这个样本集下进行分类,分类方法有一个接口函数,我只要把这个样本集还有分类数目这两个参数传进去就行了。
so 不是我不想分开来处理

#6


标记学习一下 创建大矩阵内存溢出怎么办?

#7


你内存有多大,跟你的程序空间又没关系,#4说的对,你去看看

#8


马桶不是塞什么就冲下去什么的,你就算是塞入一头骆驼,它接下来也会出问题。

#9


引用 5 楼 yjh18v 的回复:
我就是从单张图片组合到一起去的,你说我要是能分还用到这来问么?
这么说吧,这50张图片中所有的像素点就是一个样本集,我需要在这个样本集下进行分类,分类方法有一个接口函数,我只要把这个样本集还有分类数目这两个参数传进去就行了。
so 不是我不想分开来处理


别把“接口函数”想成无限制的东西。

#10


所以说,你需要修改你的接口函数,传入50张图片,然后函数自己将图片解析成点
而不是你把点都给解析好,然后一股脑的传进函数里

这就好比,你有50个包裹,需要先将包裹拆开,然后将里面的东西进行分类
不管你是想50个包裹自己拆开自己分类,还是将50个包裹交给别人去分类
你都应该一个包裹,一个包裹的去处理
而不是先将50个包裹一股脑的拆开,里面东西散落一地,然后再让别人去捡垃圾

#11


如果确实没有办法,按就试试4楼的内存映射吧,应该可以解决。

#12


你的接口真能接收这么大数组么?表示怀疑。

#1


回到C++,这么大的数组你依然无法创建
50张图片,你应该定义成图片格式啊,比如Image
然后循环图片里的像素进行处理
不要把所有像素都放到一个大数组里去

#2


能分开自然不会去创建那么大的数组了,关键有需要,不能分开啊。。

#3


为什么不能分开
到底是手段为目的服务,还是目的为手段服务?
不要把手段当成目的
能实现目的就行了,手段是可以变通的

#4


使用内存映射文件,这样就可以使用很大很大的空间了。

#5


我就是从单张图片组合到一起去的,你说我要是能分还用到这来问么?
这么说吧,这50张图片中所有的像素点就是一个样本集,我需要在这个样本集下进行分类,分类方法有一个接口函数,我只要把这个样本集还有分类数目这两个参数传进去就行了。
so 不是我不想分开来处理

#6


标记学习一下 创建大矩阵内存溢出怎么办?

#7


你内存有多大,跟你的程序空间又没关系,#4说的对,你去看看

#8


马桶不是塞什么就冲下去什么的,你就算是塞入一头骆驼,它接下来也会出问题。

#9


引用 5 楼 yjh18v 的回复:
我就是从单张图片组合到一起去的,你说我要是能分还用到这来问么?
这么说吧,这50张图片中所有的像素点就是一个样本集,我需要在这个样本集下进行分类,分类方法有一个接口函数,我只要把这个样本集还有分类数目这两个参数传进去就行了。
so 不是我不想分开来处理


别把“接口函数”想成无限制的东西。

#10


所以说,你需要修改你的接口函数,传入50张图片,然后函数自己将图片解析成点
而不是你把点都给解析好,然后一股脑的传进函数里

这就好比,你有50个包裹,需要先将包裹拆开,然后将里面的东西进行分类
不管你是想50个包裹自己拆开自己分类,还是将50个包裹交给别人去分类
你都应该一个包裹,一个包裹的去处理
而不是先将50个包裹一股脑的拆开,里面东西散落一地,然后再让别人去捡垃圾

#11


如果确实没有办法,按就试试4楼的内存映射吧,应该可以解决。

#12


你的接口真能接收这么大数组么?表示怀疑。