Próbuję zapisać ogromne ilości danych na moim dysku SSD (dysk SSD). I przez ogromne kwoty mam na myśli 80 GB.
Przeglądałem sieć w poszukiwaniu rozwiązań, ale najlepsze, jakie wymyśliłem, to:
#include <fstream>
const unsigned long long size = 64ULL*1024ULL*1024ULL;
unsigned long long a[size];
int main()
{
std::fstream myfile;
myfile = std::fstream("file.binary", std::ios::out | std::ios::binary);
//Here would be some error handling
for(int i = 0; i < 32; ++i){
//Some calculations to fill a[]
myfile.write((char*)&a,size*sizeof(unsigned long long));
}
myfile.close();
}
Skompilowany z Visual Studio 2010 i pełnymi optymalizacjami i działający pod Windows7 ten program osiąga maksimum około 20 MB / s. Naprawdę przeszkadza mi to, że Windows może kopiować pliki z innego dysku SSD na ten dysk SSD w zakresie od 150 MB / s do 200 MB / s. Co najmniej 7 razy szybciej. Dlatego uważam, że powinienem być w stanie jechać szybciej.
Jakieś pomysły, jak mogę przyspieszyć pisanie?
fwrite()
, mogłem uzyskać około 80% maksymalnej prędkości zapisu. Tylko dzięki FILE_FLAG_NO_BUFFERING
nie mogłem uzyskać maksymalnej prędkości.