Zrobiłem taki prosty testowy kod, który tworzy 10 tysiący pustych plików tekstowych w podfolderze:
#include <iostream>
#include <time.h>
#include <string>
#include <fstream>
void CreateFiles()
{
int i = 1;
while (i <= 10000) {
int filename = i;
std::string string_i = std::to_string(i);
std::string file_dir = ".\\results\\"+string_i+".txt";
std::ofstream outfile(file_dir);
i++;
}
}
int main()
{
clock_t tStart1 = clock();
CreateFiles();
printf("\nCzas generowania plikow: %.2fs\n", (double)(clock() - tStart1)/CLOCKS_PER_SEC);
std::cin.get();
return 0;
}
Wszystkie 10 tyś. pustych plików stworzą się (na moim komputerze) w jakieś 3.5
sekundy.
Pytanie 1: pomijając te konwersje inta do stringa itp., czy jest coś co mógłbym już na tym etapie zoptymalizować aby było szybciej? Chodzi mi o użycie std::ofstream outfile
- być może użycie czegoś innego jest znacznie szybsze w wykonywaniu się?
W każdym razie, 3.5 sekundy jest całkiem zadowalające względem tego:
Dodałem do funkcji jakiś prosty prototyp, który wypełnia owe pliki .txt: kilka razy zmienną i
i jakimś stałym tekstem:
void CreateFiles()
{
int i = 1;
while (i <= 10000) {
int filename = i;
std::string string_i = std::to_string(i);
std::string file_dir = ".\\results\\"+string_i+".txt";
std::ofstream outfile(file_dir);
// tutaj mam to wypełnianie plików
outfile << i << " stała " << i << " którą " << i << " wypełniam " << i << " plik " << i << " //coś// " << i
<< " tam " << i;
i++;
}
}
I teraz całość (tworzenie plików + ich wypełnianie) wykonuje się w... ~37
sekundy, więc jest już kolosalna różnica. A to tylko (lub aż?) 10 tysięcy plików.
Pytanie 2: czy da się tutaj coś zoptymalizować? Może jakaś szybsza alternatywa wypełniania plików, albo może zapomniałem o czymś oczywistym co spowalnia cały proces wykonywania się?
A może trochę wyolbrzymiam i taki czas jest całkiem normalny? Jest tu pole do optymalizowania?