У меня проблема, когда при выполнении цикла по моему оператору foreach мое приложение возвращает ошибку тайм-аута. Обратите внимание: я не могу изменить или сделать представление в таблице, которую я запрашиваю.Неэффективное заявление о начале работы LINQ
IEnumerable<MyTable> TContextData;
if (!string.IsNullOrEmpty(id)
|| !string.IsNullOrEmpty(name)
|| !string.IsNullOrEmpty(cell)
)
{
TContextData = (from e in db.mytable
where (!String.IsNullOrEmpty(e.id))
select e);
}
else
{
TContextData = null;
}
List<EachC> mDatalist = new List<EachC>();
if (TContextData != null)
{
foreach (var i in TContextData.ToList())
{
EachMR EachM = new EachMR();
EachM.Feature = i.TRuid;
EachM.Feature2 = i.TRuid2;
EachM.Feature3 = i.TRuid3;
EachM.Date = GetInnerTextfromXML(EachM.Feature3, "/Sections/Multiple/Functions/Group/Date");
mdatalist.Add(EachM);
}
}
Существует около 40 тыс. Строк для повторения. Есть ли способ сделать это более эффективным?
Сообщение об ошибке: исключение типа «System.OutOfMemoryException» произошло в System.Data.Entity.dll, но не был обработан в пользовательском коде
я увеличила время ожидания в контексте с
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 0;
, но безрезультатно, поскольку это просто проблема маскировки.
Вам нужно все содержимое строки 'mytable'? Действительно ли на каждую строку действительно нужно воздействовать «делать вещи»? Может ли 'e.id' когда-либо быть нулевым или просто пустым или ему действительно нужны обе проверки? Разве это не так, если вы перед вызовом «.ToList()» второй запрос? Вам нужно сохранить изменения обратно в базу данных? Получаете ли вы доступ к дочерним таблицам 'mytable' в« do stuff »(смотрите ли запросы, выполняемые лениво в цикле' for')? Профилировали ли вы это, чтобы увидеть, что работает SQL? Скорее всего, вы делаете 40 000 запросов вместо 1. –
Почему '.Take (1)' предотвратит тайм-ауты в вашем 'foreach'? - Я имею в виду, очевидно, что он вернет только одну строку, но почему бы вам получить одну строку вместо пустой (или нулевой) проверки? – gobes
Как ваше приложение размещено, сколько времени занимает время? Кроме того, ваша проблема может быть не с изображением linq, которое вы указали, но с элементом '#Do Stuff', который вы нам не показали. Вам нужно прокомментировать свой код, особенно часть #Do Stuff, и посмотреть, какая часть занимает слишком много времени. –