大家有更好的檢驗結果,妨請告訴我,我的信箱: [email protected] , 此文權當拋磚引玉。
轉載不必說明出處,隨便轉去。
Oracle Berkeley DB 基礎: http://www.oracle.com/technology/products/berkeley-db/index.html
Berkeley DB的中國官方部落格: Oracle Berkeley DB 中國研發團隊的部落格» BDB C# API初探
BDB效能測試程式C#版本官網說在XP sp3上可以達到45,748條/s,不過那不是用C#寫的,估計快一些, 以下是我測的結果:
本機上Intel 單核心2.8G, 2G, 約15337條/S,
伺服器至強四核心的, 約47,746條/S,
網路上幾乎找不到C#的效能測試程序,就是範例也極少,建議大家看看Berkeley DB的中國官方部落格地址:Oracle Berkeley DB 中國研發團隊的部落格» BDB C# API初探
以下是小弟寫的BDB C#版測試核心程序,大家可以參考
程式碼
using System;
using System.Collections.Generic;
using System.Text;
using BerkeleyDB;
public class BRBDBDefault : IDisposable
{
BTreeDatabaseConfig btreeDBConfig;
BTreeDatabase btreeDB;
public BRBDBDefault() : this("bdb.db") { }
public BRBDBDefault(string dbName)
{
btreeDBConfig = new BTreeDatabaseConfig();
btreeDBConfig.Duplicates = DuplicatesPolicy.SORTED;
btreeDBConfig.Creation = CreatePolicy.IF_NEEDED; //如果不存在資料庫就建立
btreeDBConfig.PageSize = 4 * 1024;//頁大小
btreeDBConfig.CacheSize = new CacheInfo(0, 1024 * 1024 * 80, 0);//快取大小
btreeDB = BTreeDatabase.Open(dbName, btreeDBConfig);
}
public void SetData(int id, string data)
{
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
try
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
catch { }
}
public void SetData(string id, string data)
{
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
try
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
catch { }
}
public string GetData(int id)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> pair = btreeDB.Get(de);
if (pair.Value != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
return string.Empty;
}
public string GetData(string id)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> pair = btreeDB.Get(de);
if (pair.Value != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
return string.Empty;
}
public string GetDBPath()
{
return btreeDB.FileName + btreeDB.DatabaseName;
}
#region IDisposable 成員
public void Close()
{
btreeDB.Close();
}
public void Dispose()
{
if (btreeDB != null) btreeDB.Dispose();
}
#endregion
}
關於測試環境的搭建,請大家自己看官網博客,說的很詳盡。前台測試程式碼就不黏了,就一個循環統計時間,
推薦大家用老趙的CodeTimer