더 나은 테스트 결과가 있으면 제 이메일 ([email protected] )로 알려주세요. 이 기사를 출발점으로 삼아야 합니다.
전재시 출처를 밝힐 필요는 없으며, 원하시는 대로 재포스팅 하시면 됩니다.
Oracle Berkeley DB 기본 사항: http://www.oracle.com/technology/products/berkeley-db/index.html
Berkeley DB의 중국 공식 블로그: Oracle Berkeley DB 중국 R&D 팀 블로그» BDB C# API에 대한 사전 탐색
BDB 성능 테스트 프로그램의 C# 버전 공식 웹사이트에는 XP sp3에서 초당 45,748개 항목에 도달할 수 있다고 나와 있지만 C#으로 작성되지 않았으므로 테스트 결과는 다음과 같습니다.
이 시스템의 Intel 단일 코어 2.8G, 2G, 약 15337라인/S,
Server Xeon 쿼드 코어, 약 47,746개 항목/S,
인터넷에서 C# 성능 테스트 프로그램을 찾는 것은 거의 불가능하며, 예제도 거의 없습니다. Berkeley DB의 공식 중국어 블로그 주소인 Oracle Berkeley DB 중국 R&D 팀 블로그 »를 살펴보는 것이 좋습니다. 공부하다
다음은 동생이 작성한 BDB C# 버전 테스트 코어 프로그램을 참고하시면 됩니다.
암호
시스템 사용;
System.Collections.Generic을 사용합니다.
System.Text 사용;
BerkeleyDB 사용;
공개 클래스 BRBDBDefault : IDisposable
{
BTreeDatabaseConfig btreeDBConfig;
BTreeDatabase btreeDB;
공개 BRBDBDefault() : this("bdb.db") { }
공개 BRBDBDefault(문자열 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);
}
공개 무효 SetData(int ID, 문자열 데이터)
{
DatabaseEntry k = 새로운 DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(데이터);
노력하다
{
btreeDB.Put(k, d);
}
잡기(System.AccessViolationException av)
{
}
잡다 { }
}
공개 무효 SetData(문자열 ID, 문자열 데이터)
{
DatabaseEntry k = 새로운 DatabaseEntry();
DatabaseEntry d = new DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(데이터);
노력하다
{
btreeDB.Put(k, d);
}
잡기(System.AccessViolationException av)
{
}
잡다 { }
}
공개 문자열 GetData(int id)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> pair = btreeDB.Get(de);
if (pair.Value != null)
반환 ASCIIEncoding.ASCII.GetString(pair.Value.Data);
문자열을 반환합니다.빈;
}
공개 문자열 GetData(문자열 ID)
{
DatabaseEntry de = new DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> pair = btreeDB.Get(de);
if (pair.Value != null)
반환 ASCIIEncoding.ASCII.GetString(pair.Value.Data);
문자열을 반환합니다.빈;
}
공개 문자열 GetDBPath()
{
btreeDB.FileName + btreeDB.DatabaseName을 반환합니다.
}
#region IDisposable 회원
공개 무효 닫기()
{
btreeDB.Close();
}
공공 무효 처리()
{
if (btreeDB != null) btreeDB.Dispose();
}
#endregion
}
테스트 환경 구축에 대해서는 공식 블로그를 직접 읽어보시기 바랍니다. 매우 자세하게 설명되어 있습니다. 프런트엔드 테스트 코드는 더 이상 끈적이지 않고 주기 통계 시간만 표시됩니다.
모두가 Lao Zhao의 CodeTimer를 사용하는 것이 좋습니다