Если у вас есть лучшие результаты тестов, сообщите мне, пожалуйста, мой адрес электронной почты: [email protected] , эту статью следует использовать в качестве отправной точки.
Источник для перепечатки указывать не нужно, просто перепостите его по своему усмотрению.
Основы Oracle Berkeley DB: http://www.oracle.com/technology/products/berkeley-db/index.html.
Официальный блог Berkeley DB в Китае: Блог группы исследований и разработок Oracle Berkeley DB China» Предварительное исследование BDB C# API
На официальном сайте C#-версии программы тестирования производительности BDB говорится, что она может достигать 45 748 элементов/с на XP sp3, но она не написана на C# и, вероятно, работает быстрее. Вот результаты моего теста:
Одноядерный процессор Intel 2,8G, 2G на этой машине, около 15337 линий/с,
Четырехъядерный сервер Xeon, около 47 746 записей/с,
В Интернете практически невозможно найти программы тестирования производительности C#, и примеров очень мало. Рекомендуется просмотреть официальный адрес блога Berkeley DB на китайском языке: Блог группы исследований и разработок Oracle Berkeley DB China » BDB C# API Preliminary. Изучать
Ниже приведена базовая программа тестирования версии BDB C#, написанная моим братом. Вы можете обратиться к ней.
код
использование системы;
использование System.Collections.Generic;
использование System.Text;
использование BerkeleyDB;
общедоступный класс BRBDBDefault: IDisposable
{
BTreeDatabaseConfig btreeDBConfig;
BTreeDatabase btreeDB;
public BRBDBDefault() : this("bdb.db") { }
public BRBDBDefault (строка dbName)
{
btreeDBConfig = новый BTreeDatabaseConfig ();
btreeDBConfig.Дупликаты = DuplicationsPolicy.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, строковые данные)
{
DatabaseEntry k = новая DatabaseEntry();
DatabaseEntry d = новая DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(данные);
пытаться
{
btreeDB.Put(к, д);
}
поймать (System.AccessViolationException av)
{
}
ловить { }
}
public void SetData (идентификатор строки, данные строки)
{
DatabaseEntry k = новая DatabaseEntry();
DatabaseEntry d = новая DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(данные);
пытаться
{
btreeDB.Put(к, д);
}
поймать (System.AccessViolationException av)
{
}
ловить { }
}
общедоступная строка GetData (int id)
{
DatabaseEntry de = новая DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair
если (пара.Значение! = ноль)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
вернуть строку.Пусто;
}
общедоступная строка GetData (идентификатор строки)
{
DatabaseEntry de = новая DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair
если (пара.Значение! = ноль)
return ASCIIEncoding.ASCII.GetString(pair.Value.Data);
вернуть строку.Пусто;
}
общедоступная строка GetDBPath()
{
вернуть btreeDB.FileName + btreeDB.DatabaseName;
}
#region IDisposable участники
публичная недействительность Закрыть()
{
btreeDB.Закрыть();
}
публичная недействительность Dispose()
{
если (btreeDB != null) btreeDB.Dispose();
}
#конечныйрегион
}
По поводу создания тестовой среды, пожалуйста, прочитайте сами официальный блог, там очень подробно. Код внешнего тестирования больше не является липким, просто статистика времени цикла,
Всем рекомендуется использовать CodeTimer Лао Чжао.