我在我的項目中有一個方法,當它放到它自己的程序中時只需要幾秒鐘的時間運行,當它在它所屬的項目中運行需要5分鐘。我不知道爲什麼。我已經嘗試過分析,不再需要改變這個和那個。我很難過。奇怪的緩慢的方法
它填充要由另一個類使用的整數矢量,但該類當前未被實例化。我儘可能多地檢查了一下,看起來確實沒有別的事情發生,但是這個方法在一個項目中奇蹟般地花費更長的時間,而不是另一個項目。
該方法在啓動時運行,大約需要5分鐘,如果自己運行則需要大約3秒。什麼可能導致這個?奇怪的項目設置?多線程的東西,我不知道? (據我所知,除非它自動完成,否則我的項目中沒有任何項目)。
有一個鏈接到項目here。如果有人能爲我解決這個問題,我會很感激,只要我能夠爲此開始一個獎勵。
該方法被稱爲PopulatePathVectors並在Level.cpp中運行。註釋掉對方法的調用(在關卡構造函數中)意味着程序在數秒內啓動。唯一使用它生成的列表的其他類是Agent,但目前沒有被實例化。
編輯 - 根據要求,這裏是代碼。雖然請記住,我的問題不是'爲什麼代碼很慢?'但'爲什麼它在一個地方速度快,我的項目速度慢?'
//parses the text path vector into the engine
void Level::PopulatePathVectors(string pathTable)
{
// Read the file line by line.
ifstream myFile(pathTable);
for (unsigned int i = 0; i < nodes.size(); i++)
{
pathLookupVectors.push_back(vector<vector<int>>());
for (unsigned int j = 0; j < nodes.size(); j++)
{
string line;
if (getline(myFile, line)) //enter if a line is read successfully
{
stringstream ss(line);
istream_iterator<int> begin(ss), end;
pathLookupVectors[i].push_back(vector<int>(begin, end));
}
}
}
}
編輯 - 我知道代碼不是最好的,但這不是重點。它自己運行很快 - 大約3秒鐘,這對我來說很好。我想要解決的問題是爲什麼在項目內部需要更長的時間。
編輯 - 我評論了除主遊戲循環以外的所有遊戲代碼。我將該方法放入代碼的初始化部分,該代碼在啓動時運行一次。除了一些設置窗口的方法外,它現在幾乎與只使用該方法的程序相同,只是它仍然需要大約5分鐘的時間才能運行。現在我知道它與pathLookupVectors上的依賴關係無關。另外,我知道這不是計算機開始寫入硬盤驅動器的記憶事物,因爲在慢速程序運行該方法時,我可以打開另一個VS實例並同時運行單個方法程序,該程序完成後秒。我意識到這個問題可能是一些基本的設置,但我沒有經歷過如此的道歉,如果這確實令人失望,最終成爲原因。我仍然不知道爲什麼它需要更長的時間。
如果在調試模式下不需要這麼長時間,這將會很棒,因爲這意味着每次進行更改時都需要等待5分鐘。這裏必須有一個原因,這是如此緩慢。這些都在削減項目的其他包括頭:
#include <d3d10.h>
#include <d3dx10.h>
#include "direct3D.h"
#include "game.h"
#include "Mesh.h"
#include "Camera.h"
#include "Level.h"
#include <vector>
using namespace std;
編輯 - this是唯一的代碼,其中的問題仍然發生一點點小得多自包含的項目。
this也是一個非常小的項目,其代碼運行速度非常快。
您是否比較過在項目中生成和未生成的程序集? – Rup
可能是項目設置或內存豬(是否比你擁有的內存佔用更多的內存?) – CharlesB
請告訴我們相關的代碼在這裏。你真的不希望人們從互聯網上下載未知文件,然後瀏覽你的整個項目的代碼,只是爲了能夠幫助你 – jalf