db4o 是一个原生于java和.net的面向对象数据库。它相当的轻量,只需要在项目里添加一个 Db4objects.Db4o.dll 就能使用db4o。看起来是很好玩的一个东西。
 
  先测试一下这个oodb的速度是如何的,需要添加Db4objects.Db4o.dll 和 Db4objects.Db4o.Linq.dll 引用:

 测试代码
测试代码
        #region 性能测试代码
        class TestClass
        {
            public Guid ID;
            public int IntField;
            public TestClass(int IntField)
            {
                ID = Guid.NewGuid();
                this.IntField = IntField;
            }
        }
        // 存储50W个对象
        static void PerformanceTest_Create()
        {
            int Times = 500000;
            using (IObjectContainer db = Db4oFactory.OpenFile("TestDBFile"))
            {
                List<TestClass> list = new List<TestClass>();
                for (int i = 0; i < Times; i++)
                {
                    list.Add(new TestClass(i));
                }
                Stopwatch sw = new Stopwatch();
                sw.Start();
                foreach(var item in list)
                {
                    db.Store(item);
                }
                sw.Stop();
                db.Close();
                Console.WriteLine("Create: " + sw.Elapsed.ToString());
            }
        }
        // 在50W个对象里查询5K个对象
        // 修改5K个对象
        static void PerformanceTest_Modify()
        {
            using (IObjectContainer db = Db4oFactory.OpenFile("TestDBFile"))
            {
                Stopwatch sw1 = new Stopwatch();
                sw1.Start();
                var result = from TestClass p in db
                             where p.IntField >= 10000 && p.IntField < 15000
                             select p;
                sw1.Stop();
                Console.WriteLine("Select: " + sw1.Elapsed.ToString());
                List<TestClass> ModifyList = result.ToList();
                foreach (var item in ModifyList)
                {
                    item.IntField -= item.IntField * 2;
                }
                Stopwatch sw2 = new Stopwatch();
                sw2.Start();
                foreach (var item in ModifyList)
                {
                    db.Store(item);
                }
                sw2.Stop();
                db.Close();
                Console.WriteLine("Modify: " + sw2.Elapsed.ToString());
            }
        }
        // 删除50W个对象
        static void PerformanceTest_Delete()
        {
            using (IObjectContainer db = Db4oFactory.OpenFile("TestDBFile"))
            {
                var result = from TestClass p in db
                             select p;
                Stopwatch sw = new Stopwatch();
                sw.Start();
                foreach (var item in result)
                {
                    db.Delete(item);
                }
                sw.Stop();
                db.Close();
                Console.WriteLine("Delete: " + sw.Elapsed.ToString());
            }
        }
        #endregion
        // 连续执行创建,查询,修改,删除。
        static void Main(string[] args)
        {
            PerformanceTest_Create();
            PerformanceTest_Modify();
            PerformanceTest_Delete();
            Console.ReadKey();
        }
 
 
 
  本机Cpu: AMD Athlon 3800+ ,Release版本测试结果如下:
  Create: 00:01:36.0419220
  Select: 00:00:00.0686757
  Modify: 00:00:00.8396310
  Delete: 00:01:54.6880567
 
  期间最高占用我 320MB 内存,生成了的数据库文件71.3MB。奇怪的是Delete之后数据库文件还是有59.4MB。
 
  然后执行下面代码:
            using (IObjectContainer db = Db4oFactory.OpenFile("TestDBFile"))
            {
                var result = db.Query<object>();
                Console.WriteLine(result.Count());
            }
 
  里面居然有999个对象,通过debug查看这些对象,发现里面就只是一个Guid,很神秘不知道作用是什么。