2010-09-06 73 views
1

我正在嘗試運行一些基準測試,只用於研究目的,它有一點berkeley db和C++代碼。目前我正在使用以下代碼進行測試。我填充recors只遞增整數(我省略了諸如錯誤處理的更好的可讀性)伯克利DB和C++基準示例?

(DB是我自己的Berkeley DB類)

// Open the database 
db.open(NULL, db_file_name.c_str(), NULL, DB_BTREE, open_flags, 0); 

int key_content = 4000; 
int data_content = 4000; 

DWORD start = ::GetTickCount(); // start counter 

while(i <= p_count) 
{ 
    /*sprintf_s(rec_buf, "my_record_%d", i); 
    std::string description = rec_buf;*/ 


    Dbt key(&key_content, sizeof(int)); 
    Dbt data(&data_content, sizeof(int)); 

    db.put(NULL, &key, &data, DB_NOOVERWRITE); 
} 

    DWORD end = ::GetTickCount(); // stop counter 
    DWORD duration = end - start; 
    std::cout << "Duration for " << p_count << " records: " << duration << " ms" << std::endl; 

所以我的問題是,如果這是一個有效基準測試的方式,因爲我的時間100.000換句話是大約1900毫秒(〜2秒)。在伯克利出版的白皮書中說,他們每秒鐘的結果高達90.700次......隨着我的基準測試,我每秒鐘有大約50,000次的輸入動作。

有沒有更好的方法來衡量伯克利? 您是否有任何有關berkeley入門和測試的代碼示例?

在此先感謝。

+1

其他因素是否可以解釋結果的差異?例如處理器速度,硬盤速度等。 – Ferruccio 2010-09-06 13:59:51

+0

是的,我不知道爲什麼我之前沒有想過... – Exa 2010-09-07 07:34:29

回答

2

只有當所有其他變量不變時,基本性能數據才能與另一個基準測試結果進行比較。 這些變量可能是詳盡的,我會盡力將其中的一些

  1. 處理器。
  2. 內存
  3. 磁盤吞吐量
  4. 在系統上加載。
  5. 操作系統。
  6. 編譯參數。
  7. 調整各個系統的參數,以OS和db爲基準。
  8. 數據大小。
+0

正如上面已經提到的,我不知道爲什麼我之前沒有想過這件事。我將重新思考我的基準策略並在不同的系統上進行測試。感謝您的建議 :) – Exa 2010-09-07 07:35:27