我想知道读取xml数据是否比从DataBase读取更快。 所以我准备了一个数据库Sql compact 4.并创建了一个包含10000条记录的表。 我也创建了一个包含相同10000个元素的xml文档。
我决定阅读它们并比较每个时间
所以我的代码如下:
protected void btn_Click(object sender, EventArgs e)
{
int entTime = DateTime.Now.Millisecond;
Database1Entities1 ent = new Database1Entities1();
foreach (var item in ent.ttts)
{
string x = item.id.ToString();
}
entTime = DateTime.Now.Millisecond - entTime;
lblEntity.Text = "Entity reading: " + entTime.ToString();
//----------------------------
int xmlTime = DateTime.Now.Millisecond;
XDocument doc = XDocument.Load(Server.MapPath("/mydoc.xml"));
foreach (var item in doc.Root.Elements())
{
string ss = item.Value;
}
xmlTime = DateTime.Now.Millisecond - xmlTime;
lblXL.Text = "xml reading: " + xmlTime.ToString();
}
结果让我想知道......我在哪里出错了???
以毫秒为单位:
xml阅读:7
实体阅读:117
xml阅读:5
实体阅读:113
=================
因此读取XML文件比读取实体框架更快
或我的数据不够大?
您的意见非常感谢:)
编辑:
我开始使用秒表,结果是一样的..
然后我将DB中的记录数增加到30000; xml文件现在包含30000条记录...相同的结果..
然后我应用了建议并使读取循环1000次...所以代码现在看起来像这样:
Stopwatch sw = new Stopwatch();
sw.Start();
Database1Entities1 ent = new Database1Entities1();
for (int z = 0; z < 1000; z++)
{
foreach (var item in ent.ttts)
{
string x = item.id.ToString();
}
}
sw.Stop();
lblEntity.Text = "Entity reading: " + sw.ElapsedMilliseconds;
//----------------------------
sw.Reset();
sw.Start();
XDocument doc = XDocument.Load(Server.MapPath("/mydoc.xml"));
for (int z = 0; z < 1000; z++)
{
foreach (var item in doc.Root.Elements())
{
string ss = item.Value;
}
}
sw.Stop();
lblXL.Text = "xml reading: " + sw.ElapsedMilliseconds;
并且结果确认如下三次:
xml阅读:678
实体阅读:8095
xml阅读:666
实体阅读:73628
xml阅读:671
实体阅读:73006
答案 0 :(得分:1)
您没有优化您的EF查询。对于初学者,您可以关闭跟踪。 EF为跟踪更改而读取的每个对象都会产生开销。如果查询仅用于读取数据,则可以关闭跟踪以提高性能。
答案 1 :(得分:0)
从我的研究来看,与所有其他存储机制相比,实体框架很慢。如果您没有特定的数据库要求,可以使用xml。
通过ADO.NET的DataReader也会提供更好的结果。 DataSet选项类似于EF。