0

我想知道读取 xml 数据是否比从数据库读取更快。所以我准备了一个数据库 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

4

2 回答 2

1

您没有优化您的 EF 查询。对于初学者,您可以关闭跟踪。EF 为每个读取的单个对象创建开销以跟踪更改。如果查询只是为了读取数据,您可以关闭跟踪以提高性能。

于 2013-10-09T16:37:34.457 回答
0

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

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

于 2013-10-09T15:01:46.090 回答