Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何提高我的应用程序的性能,该应用程序使用LINQtoEntities和XElement生成XML_C#_Entity Framework_Linq To Entities_Linq To Xml - Fatal编程技术网

C# 如何提高我的应用程序的性能,该应用程序使用LINQtoEntities和XElement生成XML

C# 如何提高我的应用程序的性能,该应用程序使用LINQtoEntities和XElement生成XML,c#,entity-framework,linq-to-entities,linq-to-xml,C#,Entity Framework,Linq To Entities,Linq To Xml,我已经构建了一个应用程序,它使用LINQtoEntities和XElement生成一个大型XML文件。它需要我们2GHz服务器的整个核心大约半小时,并使用约1GB的内存 我正在做以下类型的工作: var xml = from x in dbContext.Table1 select new XElement("Table1", new XElement("Field1", x.Field1),

我已经构建了一个应用程序,它使用LINQtoEntities和XElement生成一个大型XML文件。它需要我们2GHz服务器的整个核心大约半小时,并使用约1GB的内存

我正在做以下类型的工作:

var xml = from x in dbContext.Table1
          select new XElement("Table1",
                     new XElement("Field1", x.Field1),
                     new XElement("Field2", x.Field2),
                     new XElement("Field3", x.Field3),
                     new XElement("MoreFields",
                         new XElement("FieldA", x.MoreFields.FieldA),
                         new XElement("FieldA", x.MoreFields.FieldA),
                         new XElement("FieldA", x.MoreFields.FieldA.DoSomeWorkWithThisField())
    )
);
我有另一个或两个深度级别,其中几个字段已经完成了一些工作,比如使用
RegEx.Match()从字符串中解析
int


有人有任何优化或重构建议吗?我尝试使用
XStreamingElement
,但似乎没有任何区别。

看起来您多次获取了整个
表1

你能把它拿到
列表中,然后重复使用吗

var list = dbContext.Table1.ToList();
var xml = new XElement("Table1",
    new XElement("Field1", list.Field1),
    new XElement("Field2", list.Field2),
    new XElement("Field3", list.Field3),
    new XElement("MoreFields",
        new XElement("FieldA", list.MoreFields.FieldA),
        new XElement("FieldA", list.MoreFields.FieldA),
        new XElement("FieldA", list.MoreFields.FieldA.DoSomeWorkWithThisField())
    )
);
我怀疑这其中涉及的内容远不止这些,但基本上-先将所需内容提取到内存中,然后再从内存中进行操作。如果只需要使用一次数据项,那么只在需要时使用就可以了,但要避免一次又一次地提取相同的数据


您正在生成的文档有多大?您的计算机有多少内存?您可能希望尝试查看性能计数器-可能大部分时间都花在垃圾收集上。

看起来您多次获取整个
表1

你能把它拿到
列表中,然后重复使用吗

var list = dbContext.Table1.ToList();
var xml = new XElement("Table1",
    new XElement("Field1", list.Field1),
    new XElement("Field2", list.Field2),
    new XElement("Field3", list.Field3),
    new XElement("MoreFields",
        new XElement("FieldA", list.MoreFields.FieldA),
        new XElement("FieldA", list.MoreFields.FieldA),
        new XElement("FieldA", list.MoreFields.FieldA.DoSomeWorkWithThisField())
    )
);
我怀疑这其中涉及的内容远不止这些,但基本上-先将所需内容提取到内存中,然后再从内存中进行操作。如果只需要使用一次数据项,那么只在需要时使用就可以了,但要避免一次又一次地提取相同的数据


您正在生成的文档有多大?您的计算机有多少内存?你可能想试试性能计数器——你可能大部分时间都在收集垃圾。

< p>对于大型文档,你应该考虑一个流式解决方案,比如“代码> XmlWriter < /代码>,而不是一个解决方案,如代码> xDoC/<代码>,它将所有数据保存在内存中。考虑一个流式解决方案,如<代码> XmlWriter <代码>,而不是一个解决方案,比如“代码> xDoC/<代码>,它将所有数据保存在内存中。

我认为这里的问题更可能与您如何使用DbWrn案有关。这是工作代码吗?表1是否是一个
IQueryable
。我觉得不对劲,你说得对,我会修好的。FixedI认为这里的问题更可能与如何使用dbcontext有关。这是工作代码吗?表1是否是一个
IQueryable
。我觉得不对劲,你说得对,我会修好的。固定的手帕。我明天试试这个。我的印象是,LINQtoEntities会理解,在构建SQL语句时,我多次引用同一个表。您知道使用Linq to实体生成
XElements
有什么好的阅读材料吗?谢谢。我明天试试这个。我的印象是,LINQtoEntities会理解,在构建SQL语句时,我多次引用同一个表。您知道使用Linq to实体生成
XElements
有什么好的阅读材料吗?