У меня проблема с назначением объекта внутри цикла foreach с использованием Entity Framework, я не знаю, почему это занимает очень много времени (почти 48 секунд для 1800 элементов в цикле !!).
Пример кода:
using (var db = new MyEntities())
{
foreach (long r in Recipients) //Recipients has 1800 items.
{
var temp = new DirectMessage();
temp = db.DirectMessages().FirstOrDefault();
temp.SenderProfileImageUrl = "https://www.google.com.sa/images/branding/googlelogo/2x/googlelogo_color_120x44dp.png";
}
}
Этот простой цикл занимает около 45 секунд !!
При тестировании и отладке я заметил, что эта команда temp = db.DirectMessages().FirstOrDefault();
делает задержку!
Кроме того, изначально он имел .Where
и .OrderBy
с использованием r.ID
, но я изменил его на самый простой способ, чтобы убедиться, что задержка не из-за фильтрации.
Обновление, оригинальный код:
foreach (long r in Recipients)
{
MsgObj = new AllMsgsClass();
MsgObj.LastMsg = db.DirectMessages.Where(a => (a.SenderID == r || a.RecipientID == r)).OrderByDescending(a => a.CreatedDate).AsNoTracking().FirstOrDefault();
try
{
if (MsgObj.LastMsg.MsgSort == "Sent")
MsgObj.LastMsg.RecipientProfileImageUrl = "https://avatars.io/twitter/" + MsgObj.LastMsg.RecipientScreenName + "/small";
else
MsgObj.LastMsg.SenderProfileImageUrl = "https://avatars.io/twitter/" + MsgObj.LastMsg.SenderScreenName + "/small";
}
catch (Exception dd)
{
string x = dd.Message;
}
MsgObj.SortOrder = Convert.ToDateTime(MsgObj.LastMsg.CreatedDate);
AllMSGsList.Add(MsgObj);
}
Любая помощь будет так цениться!