C# 如何提高我的应用程序的性能,该应用程序使用LINQtoEntities和XElement生成XML
我已经构建了一个应用程序,它使用LINQtoEntities和XElement生成一个大型XML文件。它需要我们2GHz服务器的整个核心大约半小时,并使用约1GB的内存 我正在做以下类型的工作: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),
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
有什么好的阅读材料吗?