XML vs Entity框架阅读速度

时间:2013-10-09 14:47:34

标签: c# xml entity-framework

我想知道读取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

2 个答案:

答案 0 :(得分:1)

您没有优化您的EF查询。对于初学者,您可以关闭跟踪。 EF为跟踪更改而读取的每个对象都会产生开销。如果查询仅用于读取数据,则可以关闭跟踪以提高性能。

答案 1 :(得分:0)

从我的研究来看,与所有其他存储机制相比,实体框架很慢。如果您没有特定的数据库要求,可以使用xml。

通过ADO.NET的DataReader也会提供更好的结果。 DataSet选项类似于EF。