精華區beta KMU_CIA 關於我們 聯絡資訊
※ 引述《a2a (尋找內心的平靜)》之銘言: : 可以了 原來是編譯器太舊版 @@ : 不過舊的程式碼雖然可以編譯成功 : 執行後卻沒有結果顯示 直接關閉視窗 @@ : 我跑第二個的結果: : 磁碟寫入速率為80MB/秒 最終決定版 ==================================================================== //#include "stdafx.h" #include <iostream> #include <fstream> #include <time.h> #include <limits> #include <cstdio> #include <fstream> //#include <math.h> using namespace std; int main(void) { long double FileSize_inMB(const char*); clock_t start = 0, finish = 0; long double duration = 0; unsigned int j = numeric_limits<unsigned int>::max(); //配置10MB的buffer,然後用於一次寫入10MB unsigned int Buffer_size = 1024*1024*10; //in bytes //因為Buffer_size是以byte為單位,不同機器上的int不一樣大, //所以要配置記憶體時,應該以int為單位另外計算出10MB等於幾單位的int unsigned int Buffer_size_unit = Buffer_size/sizeof(unsigned int); unsigned int *pBuffer = new unsigned int[Buffer_size_unit]; //unsigned int j = pow(2,(sizeof(j)*8))-1; //理論上啦,4294967295; int MB_num = 0; cout << "請輸入想測試的檔案大小(以10MB為單位):"; cin >> MB_num; ofstream File_obj("TestData" , ios_base::out | ios_base::binary); //製造出buffer區塊的內容 //因為一次要寫入4 bytes(以int為單位)所以迴圈應該要跑Buffer_size_unit次 //這樣才有10MB for ( unsigned long Bi = 0; Bi < Buffer_size_unit; ++Bi ){ pBuffer[Bi] = j; } //計時開始 start = clock(); for ( unsigned long i = 0; i < (MB_num/10); ++i ) //在記憶體中從 pBuffer位置處開始,一次讀取Buffer_size大小的內容, //然後寫入檔案中。所以要用Buffer_size而不是Buffer_size_unit File_obj.write( reinterpret_cast<char*>(pBuffer), Buffer_size); //計時結束 finish = clock(); delete [] pBuffer; duration = (long double)(finish - start) / CLOCKS_PER_SEC; File_obj.close(); long double TestData_size = FileSize_inMB("TestData"); double Rate = TestData_size/duration; cout << "測試時間:" << duration << "秒" << endl; cout << "共寫入" << TestData_size << "MB" << endl; cout << "磁碟寫入速率為" << Rate << "MB/秒" << endl << endl; cin.ignore(256, '\n'); cout << "請按任一鍵繼續..." << std::endl; cin.get(); remove("TestData"); return 0; } long double FileSize_inMB(const char* sFileName){ ifstream f; f.open(sFileName, std::ios_base::binary | std::ios_base::in); if (!f.good() || f.eof() || !f.is_open()) { return 0; } f.seekg(0, std::ios_base::beg); std::ifstream::pos_type begin_pos = f.tellg(); f.seekg(0, std::ios_base::end); long double ReturnSizeInMB = (static_cast<long double>(f.tellg() - begin_pos))/(1024*1024); f.close(); return ReturnSizeInMB; } ==================================================================== 希望大家統一用100MB試試看,如果硬碟耐操,也可以試試看用GB -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.169.236.105
a2a:21.9202MB/秒 04/15 15:03
tttp86:?是喔,怎麼銳減? 04/15 18:53
a2a:會不會跟執行時的環境有關阿? 跑測試時開Emule+foobar+pcman 04/16 23:39
a2a:+Firefox+MSN..... @@ 04/16 23:40
tttp86:應該沒關咧....@@ 04/18 00:37