Недавно я закончил писать то, что считаю своим кодом «main.cpp» в проекте консоли Win32. Он отлично разрабатывает решение, и внешняя версия выпуска работает и завершается в течение 30 секунд, что быстро для количества вычислений, которые она делает.C++ MFC медленное исполнение с 2D-вектором
Когда я использую свой встроенный пользовательский интерфейс MFC с помощью всего лишь 1 стандартного диалогового окна для некоторых простых входов с плавающей запятой, программа, которая сама по себе запускается, получает зависание, когда она должна создавать и вычислять некоторые 2D-векторы.
std::mt19937 generator3(time(0));
static uniform_01<std::mt19937> dist3(generator3);
std::vector<int> e_scatter;
for (int i = 0; i <= n; i++)
{
if (dist3() >= perc_e)
{
e_scatter.push_back(1);
// std::cout << e_scatter[i] << '\n';
// system("pause");
}
else
{
e_scatter.push_back(0);
// std::cout << e_scatter[i] << '\n';
// system("pause");
}
}
string fileName_escatter = "escatter.dat";
FILE* dout4 = fopen(fileName_escatter.c_str(), "w");
for (int i = 0; i <= n; i++)
{
fprintf(dout4, "%d", e_scatter[i]);
fprintf(dout4, "\n");
// fprintf(dout2, "%f", e_scatter[i]);
// fprintf(dout2, "\n");
};
fclose(dout4);
std::vector<vector<float>> electron;
// std::vector<float> angle;
**randutils::mt19937_rng rng2;
std::vector<float> rand_scatter;
for (int i = 0; i <= n; i++)
{
std::vector<float> w;
electron.push_back(w);
rand_scatter.push_back(rng2.uniform(0.0, 1.0));
for (int j = 0; j <= 2000; j++)
{
if (e_scatter[i] == 0)
{
electron[i].push_back(linspace[j] * (cos((rand_scatter[i] * 90) * (PI/180))));
//electron[i][j] == abs(electron[i][j]);
}
else
{
electron[i].push_back(linspace[j]);
};
};
};**
Более конкретно, он не проходит мимо определенного цикла, и я вынужден закрыть его. Я пропустил его на 20 минут, чтобы увидеть, будет ли он просто вычислять вещи медленнее, но все равно получает от него 0 выходных данных. Я не так хорош в части отладки кода, когда у меня есть этот графический интерфейс от MFC, так как у меня нет консоли, которая появляется.
Есть ли что-то, что мне не хватает, когда я пытаюсь использовать MFC для gui и больших 2D-векторов?
Первый цикл вычисляет и выдает выходной файл «escatter.dat» после его завершения, но второй набор циклов никогда не заканчивается, а использование памяти продолжает увеличиваться.
linspace [i] рассчитывается перед всем этим кодом и является всего лишь вектором номеров 2001 года, которые он использует для заполнения электронного вектора std :: vector> в двойном для циклов.
Ive включил это http://pastebin.com/i8A7t38K ссылку на часть MFC кода, который я использовал, чтобы не сделать это сообщение действительно долго читаемым.
спасибо.
Предположение, что проект MFC компилируется в режиме отладки, который добавляет тонны чеков к вектору доступа. Это может легко превратить секунды в минуты. –
Я совсем забыл об этом в режиме отладки. Вы на 100% правильны. Спасибо! – Kazkek