Si tiene mejores resultados en las pruebas, dígamelo a mi correo electrónico: [email protected] . Este artículo debe usarse como punto de partida.
No es necesario indicar la fuente para la reimpresión, simplemente vuelva a publicarla como desee.
Conceptos básicos de Oracle Berkeley DB: http://www.oracle.com/technology/products/berkeley-db/index.html
Blog oficial de Berkeley DB en China: Blog del equipo de I+D de Oracle Berkeley DB China Una exploración preliminar de la API de BDB C#
El sitio web oficial de la versión C# del programa de prueba de rendimiento BDB dice que puede alcanzar 45,748 elementos/s en XP sp3, pero no está escrito en C# y probablemente sea más rápido. Aquí están los resultados de mi prueba:
Intel single-core 2,8G, 2G en esta máquina, aproximadamente 15337 líneas/S,
Servidor Xeon de cuatro núcleos, alrededor de 47.746 entradas/S,
Es casi imposible encontrar programas de prueba de rendimiento de C# en Internet, y hay muy pocos ejemplos. Se recomienda consultar la dirección del blog oficial en chino de Berkeley DB: Blog del equipo de investigación y desarrollo de Oracle Berkeley DB China » Estudiar
El siguiente es el programa principal de prueba de la versión BDB C# escrito por mi hermano. Puede consultarlo.
código
usando Sistema;
usando System.Collections.Generic;
usando System.Text;
usando BerkeleyDB;
clase pública BRBDBDefault: IDisposable
{
BTreeDatabaseConfig btreeDBConfig;
BTreeDatabasebtreeDB;
público BRBDBDefault(): esto("bdb.db") { }
BRBDBDefault público (cadena dbName)
{
btreeDBConfig = nuevo BTreeDatabaseConfig();
btreeDBConfig.Duplicates = DuplicatesPolicy.SORTED;
btreeDBConfig.Creation = CreatePolicy.IF_NEEDED //Crea la base de datos si no existe;
btreeDBConfig.PageSize = 4 * 1024 //Tamaño de página
btreeDBConfig.CacheSize = new CacheInfo(0, 1024 * 1024 * 80, 0);//Tamaño de caché
btreeDB = BTreeDatabase.Open(dbName, btreeDBConfig);
}
setData público vacío (int id, datos de cadena)
{
Entrada de base de datos k = nueva entrada de base de datos();
Entrada de base de datos d = nueva entrada de base de datos();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(datos);
intentar
{
btreeDB.Put(k, d);
}
captura (System.AccessViolationException av)
{
}
atrapar { }
}
SetData público vacío (ID de cadena, datos de cadena)
{
Entrada de base de datos k = nueva entrada de base de datos();
Entrada de base de datos d = nueva entrada de base de datos();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(datos);
intentar
{
btreeDB.Put(k, d);
}
captura (System.AccessViolationException av)
{
}
atrapar { }
}
cadena pública GetData(int id)
{
Entrada de base de datos de = nueva entrada de base de datos();
de.Data = BitConverter.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> par = btreeDB.Get(de);
si (par.Valor! = nulo)
devolver ASCIIEncoding.ASCII.GetString(pair.Value.Data);
cadena de retorno. Vacío;
}
cadena pública GetData (identificación de cadena)
{
Entrada de base de datos de = nueva entrada de base de datos();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair<DatabaseEntry, DatabaseEntry> par = btreeDB.Get(de);
si (par.Valor! = nulo)
devolver ASCIIEncoding.ASCII.GetString(pair.Value.Data);
cadena de retorno. Vacío;
}
cadena pública GetDBPath()
{
devolver btreeDB.FileName + btreeDB.DatabaseName;
}
#región IMiembros desechables
cierre público vacío()
{
btreeDB.Close();
}
eliminación pública vacía ()
{
si (btreeDB! = nulo) btreeDB.Dispose();
}
#regiónfinal
}
Con respecto al establecimiento del entorno de prueba, lea usted mismo el blog oficial, que es muy detallado. El código de prueba de front-end ya no es fijo, solo un tiempo de estadísticas de ciclo,
Se recomienda que todos utilicen CodeTimer de Lao Zhao.