Wenn Sie bessere Testergebnisse haben, teilen Sie mir dies bitte mit, meine E-Mail: [email protected] . Dieser Artikel sollte als Ausgangspunkt verwendet werden.
Es ist nicht erforderlich, die Quelle für den Nachdruck anzugeben, Sie können es einfach nach Belieben erneut veröffentlichen.
Oracle Berkeley DB-Grundlagen: http://www.oracle.com/technology/products/berkeley-db/index.html
Offizieller Blog von Berkeley DB in China: Blog des Forschungs- und Entwicklungsteams von Oracle Berkeley DB China» Eine vorläufige Untersuchung der BDB C#-API
Auf der offiziellen Website der C#-Version des BDB-Leistungstestprogramms heißt es, dass es unter XP SP3 45.748 Elemente/s erreichen kann, aber es ist nicht in C# geschrieben und wahrscheinlich schneller. Hier sind die Ergebnisse meines Tests:
Intel Single-Core 2,8G, 2G auf dieser Maschine, ca. 15337 Zeilen/S,
Server Xeon Quad-Core, ca. 47.746 Einträge/S,
Es ist fast unmöglich, C#-Leistungstestprogramme im Internet zu finden, und es gibt nur sehr wenige Beispiele. Es wird empfohlen, einen Blick auf die offizielle chinesische Blog-Adresse von Berkeley DB zu werfen: Blog des Oracle Berkeley DB China R&D Team » Studie
Das Folgende ist das von meinem Bruder geschriebene BDB-C#-Versionstest-Kernprogramm. Sie können darauf verweisen.
Code
Verwenden des Systems;
mit System.Collections.Generic;
Verwenden von System.Text;
unter Verwendung von BerkeleyDB;
öffentliche Klasse BRBDBStandard: 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; //Datenbank erstellen, falls sie nicht existiert
btreeDBConfig.PageSize = 4 * 1024; //Seitengröße
btreeDBConfig.CacheSize = new CacheInfo(0, 1024 * 1024 * 80, 0);//Cache-Größe
btreeDB = BTreeDatabase.Open(dbName, btreeDBConfig);
}
public void SetData(int id, string data)
{
Datenbankeintrag k = neuer Datenbankeintrag();
DatabaseEntry d = new DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
versuchen
{
btreeDB.Put(k, d);
}
Catch (System.AccessViolationException av)
{
}
fangen { }
}
public void SetData(string id, string data)
{
Datenbankeintrag k = neuer Datenbankeintrag();
DatabaseEntry d = new DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes(data);
versuchen
{
btreeDB.Put(k, d);
}
Catch (System.AccessViolationException av)
{
}
fangen { }
}
öffentliche Zeichenfolge 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;
}
öffentlicher 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;
}
öffentliche Zeichenfolge GetDBPath()
{
return btreeDB.FileName + btreeDB.DatabaseName;
}
#region IDisposable-Mitglieder
öffentliche Leere Close()
{
btreeDB.Close();
}
public void Dispose()
{
if (btreeDB != null) btreeDB.Dispose();
}
#endregion
}
Bezüglich der Einrichtung der Testumgebung lesen Sie bitte selbst den offiziellen Blog, der sehr detailliert ist. Der Front-End-Testcode ist nicht mehr klebrig, sondern nur noch eine Zyklusstatistikzeit.
Es wird jedem empfohlen, den CodeTimer von Lao Zhao zu verwenden