Похоже, что вы получаете Table1
несколько раз.
Можете ли вы получить его на List<T>
, а затем использовать его несколько раз?
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())
)
);
Я подозреваю, что это гораздо больше, чем это, но в основном - извлеките то, что вам нужно, в память заранее, а затем поработайте над этим. Если вам нужно использовать элемент данных только один раз, это нормально делать только тогда, когда он вам нужен, но избегайте повторного использования одних и тех же данных снова и снова.
Насколько большой документ вы генерируете, и сколько памяти у вашей машины? Возможно, вы захотите посмотреть на счетчики производительности - возможно, вы тратите большую часть времени на сборку мусора.