作者tttp86 (鄉民就是我)
看板KMU_CIA
標題Re: [心得] 簡單的硬碟測速程式~~~
時間Sun Apr 15 09:50:29 2007
※ 引述《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