花费太长时间来完成操作并使用大量物理内存

Posted

技术标签:

【中文标题】花费太长时间来完成操作并使用大量物理内存【英文标题】:Taking too long time to compelete an operation and using lots of physical memory 【发布时间】:2013-06-12 18:08:32 【问题描述】:

我有这段代码:

function Plot2DScatter(img1,img2)
n = size(img1,1);
m = size(img2,1);
axis([0 280 0 280])
hold on
   for i=1:n
       for j=1:m
           x = img1(i,j);
           y = img2(i,j);
           plot(x,y);
       end
   end
end  

它是一个将在 GUI 中使用的函数。 img1 和 img2 是两个 2048*2048 的图像矩阵。 所以你看到循环应该重复 4194304 次。 我的问题是系统完成操作需要太多时间(大约 45 分钟)并且 cpu-usage 非常高。当它完成时,需要大量的物理内存 (RAM)(大约 45%),以至于计算机被挂起。 我可以做些什么来降低施加在系统上的压力并加快操作速度?

【问题讨论】:

一个小评论:这是一个很好的做法not to use i and j as variable nams in Matlab。 【参考方案1】:

在 matlab 中,您应尽量避免 for 循环,而应使用矩阵表达式。你想要做的事情可以这样做:

plot(img1(:),img2(:))

img1(:)img2(:) 将图像转换为可直接用作绘图函数的输入的向量。出于您的目的,使用 scatter 函数可能会更好,它将您的数据直接绘制为圆圈。那就是:

function Plot2DScatter(img1,img2)
   scatter(img1(:),img2(:))
   axis([0 280 0 280]) % note with the axis statement 
                       % afterwards you do not need 'hold on'
end

【讨论】:

以上是关于花费太长时间来完成操作并使用大量物理内存的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3_prepare_v2 不会返回花费太长时间(慢)和使用内存

Cesium的渲染都是通过DrawCommand来完成

OSError: [WinError 1455] 页面文件太小,无法完成操作

OSError: [WinError 1455] 页面文件太小,无法完成操作

由于堆内存已满,jUnits 花费的时间太长

linux中物理内存和虚拟内存