より良いテスト結果が得られた場合は、電子メール[email protected]までお知らせください。この記事を出発点として使用してください。
転載の場合は出典の記載は必要ありませんので、ご自由に転載してください。
Oracle Berkeley DBの基本: http://www.oracle.com/technology/products/berkeley-db/index.html
中国における Berkeley DB の公式ブログ: Oracle Berkeley DB China R&D チームのブログ「BDB C# API の予備調査」
BDB パフォーマンス テスト プログラムの C# バージョンの公式 Web サイトには、XP sp3 では 45,748 アイテム/秒に達すると記載されていますが、これは C# で書かれていないため、おそらくより高速です。私のテストの結果は次のとおりです。
Intel シングルコア 2.8G、このマシンの 2G、約 15337 ライン/秒、
サーバー Xeon クアッドコア、約 47,746 エントリ/秒、
インターネット上で C# パフォーマンス テスト プログラムを見つけることはほとんど不可能であり、例はほとんどありません。Berkeley DB の公式中国語ブログ アドレス「Oracle Berkeley DB China R&D Team's Blog」「BDB C# API Preliminary」を参照することをお勧めします。勉強
以下は弟が書いた BDB C# 版のテストコアプログラムです。参考にしてください。
コード
システムを使用する;
System.Collections.Generic を使用します。
System.Text を使用します。
BerkeleyDB を使用します。
パブリック クラス BRBDBDefault : IDisposable
{
BTreeDatabaseConfig btreeDBConfig;
BTreeデータベース btreeDB;
public BRBDBDefault() : this("bdb.db") { }
public BRBDBDefault(string dbName)
{
btreeDBConfig = 新しい 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 = 新しい DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(データ);
試す
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
{ } をキャッチします
}
public void SetData(文字列ID, 文字列データ)
{
DatabaseEntry k = new DatabaseEntry();
DatabaseEntry d = 新しい DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
試す
{
btreeDB.Put(k, d);
}
catch (System.AccessViolationException av)
{
}
{ } をキャッチします
}
パブリック文字列 GetData(int id)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> ペア = btreeDB.Get(de);
if (pair.Value != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
文字列を返します。空;
}
パブリック文字列 GetData(文字列 ID)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> ペア = btreeDB.Get(de);
if (pair.Value != null)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
文字列を返します。空;
}
パブリック文字列 GetDBPath()
{
btreeDB.ファイル名 + btreeDB.データベース名を返します。
}
#region I使い捨てメンバー
public void Close()
{
btreeDB.Close();
}
public void Dispose()
{
if (btreeDB != null) btreeDB.Dispose();
}
#エンドリージョン
}
テスト環境の構築に関しては、公式ブログが非常に詳しく書かれているので、ぜひご自身で読んでみてください。フロントエンド テスト コードはもはやスティッキーではなく、単なるサイクル統計時間です。
Lao Zhao の CodeTimer を使用することをお勧めします。