今天,我遇到了访问向量元素随矢量大小变慢的问题。由于这不是我的代码,我无法发布,所以请耐心等待。我会尽可能详细地描述它。访问std ::向量元素减慢向量大小
代码的功能如下: 1. a数据集类,需要一个.txt文件,其中包含文件名。这些指向标准的PNG图像,需要加载。这由Image<T>
类完成。图像被加载为Image<unsigned char>
并被推回到std::Vector
。 2.数据加载完成后。我可以访问我的数据集中的矢量以便使用它。所以它看起来是这样的:
Dataset d;
d.init("filenames_list.txt"); //Loads the images
for(int i=0; i< d.getDatavector().size(); i++){
Image<unsigned char> current = d.getDatavector()[i];
//Do work on current image here.
}
这里getDatavector()将返回一个std::Vector<Image<unsigned char> >
。这些图像包含三个整数,宽度,高度和通道数量,还有一个指向交错数据的Boost共享指针。
对于小型testruns,我有一个包含大约150个图像的文件列表。运行这个程序能正常工作和速度测量告诉我,
Image<unsigned char> current = d.getDatavector()[i];
约需10毫秒内完成。但是,如果我想在我的完整数据集上处理1500张图像,上面的行需要大约500ms才能完成。我试图做很多不同的事情来解决它,但是我受到代码的一般结构和内存的限制。因为如果我做到以下几点:
const std::Vector<Image<unsigned char> > data = d.getDatavector();
,它的运行速度非常快,但我很快就用完了内存。
我知道我的问题描述有些模糊,我不希望得到确切的解决方案,但我希望提供一些关于在哪里寻找的提示。我搜索了类似的问题,但人们似乎只关心向量与数组的一般速度。我的问题是,速度随着矢量的长度而降低!如果有人看到了这种问题,欢迎任何建议!
到目前为止,我尝试使用std :: vector :: iterator或使用(d.getDatavector()。data())作为指针访问内容。似乎没有什么能够提高速度。
1)你在哪里开始/停止计时器? 2)你是否想要包含内存分配时间? 3)你是在IDE中还是在IDE(命令行)之外运行它? – 2012-11-14 21:56:56
'getDatavector'是否返回一个引用?或价值? –
确实,这看起来很奇怪,Image数据类型非常小,并且唯一的大部分是由智能指针携带的。 – didierc