Reputation: 2521
I have following code:
if (itemsListFromDbQuery != null && itemsListFromDbQuery.Any())
{
tempItemsList.Add(new ItemModel
{
FieldOne = itemsListFromDbQuery.FirstOrDefault().FieldOne,
FieldTwo = itemsListFromDbQuery.FirstOrDefault().FieldTwo ?? 0
});
}
It felt somewhat slow so I added a duration log and saw that each time it executes this code it takes an average of 800 ms.
UPDATE: Here is the code to get the itemsListFromDbQuery
:
var itemsListFromDbQuery = getListFromDbQuery();
public IEnumerable<Item> getListFromDbQuery()
{
return DbContext.Items.Where(...);
}
Why does this code execute so slowly?
What can I do to improve the performance?
Upvotes: 0
Views: 43
Reputation: 151710
Because itemsListFromDbQuery
looks like an IQueryable<T>
, which will be executed deferredly.
So: itemsListFromDbQuery.Any()
and itemsListFromDbQuery.FirstOrDefault()
(twice) will execute the query again.
Save the entities in a list, or call FirstOrDefault()
on beforehand:
var queryMaterialized = itemsListFromDbQuery.FirstOrDefault();
if (queryMaterialized != null)
{
tempItemsList.Add(new ItemModel
{
FieldOne = queryMaterialized.FieldOne,
FieldTwo = queryMaterialized.FieldTwo ?? 0
});
}
itemsListFromDbQuery
will never be null
anyway.
Upvotes: 3