หากคุณมีผลการทดสอบดีขึ้น โปรดบอกฉันที่อีเมลของฉัน: [email protected] บทความนี้ควรใช้เป็นจุดเริ่มต้น
ไม่จำเป็นต้องระบุแหล่งที่มาของการพิมพ์ซ้ำ เพียงแค่โพสต์ใหม่ตามที่คุณต้องการ
พื้นฐานของ Oracle Berkeley DB: http://www.oracle.com/technology/products/berkeley-db/index.html
บล็อกอย่างเป็นทางการของ Berkeley DB ในประเทศจีน: บล็อกของทีมวิจัยและพัฒนาของ Oracle Berkeley DB China» การสำรวจเบื้องต้นของ BDB C# API
เว็บไซต์อย่างเป็นทางการของโปรแกรมทดสอบประสิทธิภาพ BDB เวอร์ชัน C# บอกว่าสามารถเข้าถึง 45,748 รายการ/วินาทีบน XP sp3 แต่ไม่ได้เขียนด้วยภาษา C# และอาจเร็วกว่า นี่คือผลการทดสอบของฉัน:
Intel single-core 2.8G, 2G บนเครื่องนี้ ประมาณ 15337 เส้น/วินาที
เซิร์ฟเวอร์ Xeon quad-core ประมาณ 47,746 รายการ/S
แทบจะเป็นไปไม่ได้เลยที่จะค้นหาโปรแกรมทดสอบประสิทธิภาพ C# บนอินเทอร์เน็ต และมีตัวอย่างน้อยมาก ขอแนะนำให้คุณดูที่อยู่บล็อกภาษาจีนอย่างเป็นทางการของ Berkeley DB: บล็อกของทีม R&D ของ Oracle Berkeley DB China » ศึกษา
ต่อไปนี้เป็นโปรแกรมหลักทดสอบเวอร์ชัน 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 = CacheInfo ใหม่ (0, 1024 * 1024 * 80, 0); // ขนาดแคช
btreeDB = BTreeDatabase.Open(dbName, btreeDBConfig);
-
SetData โมฆะสาธารณะ (int id, ข้อมูลสตริง)
-
DatabaseEntry k = ใหม่ DatabaseEntry();
DatabaseEntry d = ใหม่ DatabaseEntry();
k.Data = BitConverter.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes (ข้อมูล);
พยายาม
-
btreeDB.ใส่(k, d);
-
จับ (System.AccessViolationException av)
-
-
จับ { }
-
SetData โมฆะสาธารณะ (รหัสสตริง ข้อมูลสตริง)
-
DatabaseEntry k = ใหม่ DatabaseEntry();
DatabaseEntry d = ใหม่ DatabaseEntry();
k.Data = ASCIIEncoding.ASCII.GetBytes(id);
d.Data = ASCIIEncoding.ASCII.GetBytes (ข้อมูล);
พยายาม
-
btreeDB.ใส่(k, d);
-
จับ (System.AccessViolationException av)
-
-
จับ { }
-
สตริงสาธารณะ GetData (int id)
-
DatabaseEntry de = ใหม่ DatabaseEntry();
de.Data = BitConverter.GetBytes(id);
KeyValuePair <DatabaseEntry, DatabaseEntry> คู่ = btreeDB.Get(de);
ถ้า (pair.Value != null)
กลับ ASCIIEncoding.ASCII.GetString (pair.Value.Data);
กลับสตริงว่างเปล่า;
-
สตริงสาธารณะ GetData (รหัสสตริง)
-
DatabaseEntry de = ใหม่ DatabaseEntry();
de.Data = ASCIIEncoding.ASCII.GetBytes(id);
KeyValuePair <DatabaseEntry, DatabaseEntry> คู่ = btreeDB.Get(de);
ถ้า (pair.Value != null)
กลับ ASCIIEncoding.ASCII.GetString (pair.Value.Data);
กลับสตริงว่างเปล่า;
-
สตริงสาธารณะ GetDBPath()
-
กลับ btreeDB.FileName + btreeDB.DatabaseName;
-
#region สมาชิก IDisposable
โมฆะสาธารณะ ปิด()
-
btreeDB.ปิด();
-
โมฆะสาธารณะกำจัด ()
-
ถ้า (btreeDB != null) btreeDB.Dispose();
-
#ภูมิภาคสุดท้าย
-
เกี่ยวกับการสร้างสภาพแวดล้อมการทดสอบ โปรดอ่านบล็อกอย่างเป็นทางการสำหรับตัวคุณเองซึ่งมีรายละเอียดมาก รหัสทดสอบส่วนหน้าไม่เหนียวอีกต่อไป เป็นเพียงเวลาสถิติวงจร
ขอแนะนำให้ทุกคนใช้ CodeTimer ของ Lao Zhao