今天,我遇到了訪問向量元素隨矢量大小變慢的問題。由於這不是我的代碼,我無法發佈,所以請耐心等待。我會盡可能詳細地描述它。訪問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