在Entity Framework中,我们通过Take()方法可以仅取得指定数量的数据,并且Entity Framework也只是从数据库中取出指定数量的数据而直接返回。
而Db4o虽然也可以在原生查询(NQ)之后追加Take()方法,但是经我测试认为其工作方式仍然是将所有数据先取出,然后再从所有数据中返回前五条……
测试过程
首先建立两个简单的类,用于对比测试:
public class 男人
{
public 男人(int 年龄)
{
this.年龄 = 年龄;
}
public int 年龄 { get; set; }
public override string ToString()
{
return "男人 年龄:" + 年龄;
}
}public class 女人
{
public 女人(int 年龄)
{
this.年龄 = 年龄;
}
public int 年龄 { get; set; }
public override string ToString()
{
return "女人 年龄:" + 年龄;
}
}
而后,在命令行程序中引入Db4o的相关dll,并在Main函数中书写初始化测试环境的代码:
Random r = new Random();
var db = Db4oFactory.OpenFile("db.db4o");for (int i = 0; i < 50000; i++)
{
db.Store(new 男人(r.Next(100)));
if (i < 10000)
{
db.Store(new 女人(r.Next(100)));
}
}Console.WriteLine("初始化完毕,按回车键继续。");
在这里就是创建5万个男人对象和1万个女人对象存入数据库。
接着编写测试代码:
Start:
Console.ReadLine();var a = DateTime.Now;
foreach (var f in db.Query<女人>().Take(5))
{
Console.WriteLine(f);
}
Console.WriteLine("读取女人数据耗时" + DateTime.Now.Subtract(a).TotalMilliseconds + "毫秒");var b = DateTime.Now;
foreach (var f in db.Query<男人>().Take(5))
{
Console.WriteLine(f);
}
Console.WriteLine("读取男人数据耗时" + DateTime.Now.Subtract(b).TotalMilliseconds + "毫秒");Console.WriteLine("按回车键重新测试");
goto Start;
这里我们使用Take()方法分别获取男人和女人的数据,并掐算其处理时间,看看数据库中的数据存储量是否对处理时间有所影响,如果有的话,就意味着Db4o并不是只读取5条数据就返回了,而是读取了全部数据。
测试结果视频:
转载请遵循此协议:署名 - 非商业用途 - 保持一致
并保留此链接:http://skyd.cnblogs.com/