SORU
19 Temmuz 2012, PERŞEMBE


İ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
19 Temmuz 2012, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • curioustravelers

    curioustrave

    12 AĞUSTOS 2006
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • Wild Academy

    Wild Academy

    8 Aralık 2009