İkili yazma C çok hızlı dosya
Benim SSD üzerine veri(katı hal sürücü) büyük miktarlarda yazmaya çalışıyorum. Ve büyük miktarlarda tarafından 80.
Çözüm, ama bu geldi en iyisi ben web göz:
#include <fstream>
using namespace std;
const unsigned long long size = 64ULL*1024ULL*1024ULL;
unsigned long long a[size];
int main()
{
fstream myfile;
myfile = fstream("file.binary", ios::out | 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();
}
Visual Studio 2010 ve tam optimizasyon ile derlenmiş ve Windows 7 altında çalışan bu program 20 MB/s civarında olmuş, içeriden dışarı. Beni gerçekten rahatsız eden şey bu Windows SSD de bir yerlerde 150 MB/s ve 200MB/s arasında başka bir SSD dosyaları kopyalayabilirsiniz. Yani en az 7 kat daha hızlı. Bu daha hızlı gitmek mümkün olması gerektiğini düşünüyorum.
Yazımı hızlandırmak için nasıl herhangi bir fikir?
CEVAP
Bu işi yaptı
#include <stdio.h>
const unsigned long long size = 8ULL*1024ULL*1024ULL;
unsigned long long a[size];
int main()
{
FILE* pFile;
pFile = fopen("file.binary", "wb");
for (unsigned long long j = 0; j < 1024; j){
//Some calculations to fill a[]
fwrite(a, 1, size*sizeof(unsigned long long), pFile);
}
fclose(pFile);
return 0;
}
Ben sadece 220MB/s olan 36sec, 8 GB zamanlı ve benim SSD olmuş, içeriden dışarı sanırım. Ayrıca kayda değer, yazımın başında bir çekirdek kodu bu kod sadece 2-5% kullanan ise 0 oranında kullanılır.
Çok teşekkür ederim herkese.
Mühendisi ikili ters yardımcı araç dos...
Okuma/dosya için jQuery kullanarak yaz...
Hızlı Linux çok sayıda dosya için Dosy...
Nasıl ve excel okuma ve yazma java dos...
AppPoolİdentity ve IIS dosya sistemi y...