List操作的性能问题

时间:2017-08-07 14:59:56

标签: c#

我有以下代码:

if (itemsListFromDbQuery != null && itemsListFromDbQuery.Any())
{
    tempItemsList.Add(new ItemModel
    {
        FieldOne = itemsListFromDbQuery.FirstOrDefault().FieldOne,
        FieldTwo = itemsListFromDbQuery.FirstOrDefault().FieldTwo ?? 0
    });
}

感觉有些慢,所以我添加了持续时间日志,并发现每次执行此代码时平均需要800毫秒。

更新:以下是获取itemsListFromDbQuery的代码:

var itemsListFromDbQuery = getListFromDbQuery();

public IEnumerable<Item> getListFromDbQuery()
{
    return DbContext.Items.Where(...);
}

为什么这段代码执行得这么慢? 我该怎么做才能提高性能?

1 个答案:

答案 0 :(得分:3)

因为itemsListFromDbQuery看起来像IQueryable<T>,所以会延迟执行。

所以:itemsListFromDbQuery.Any()itemsListFromDbQuery.FirstOrDefault()(两次)将再次执行查询。

将实体保存在列表中,或事先致电FirstOrDefault()

var queryMaterialized = itemsListFromDbQuery.FirstOrDefault();

if (queryMaterialized != null)
{
    tempItemsList.Add(new ItemModel
    {
        FieldOne = queryMaterialized.FieldOne,
        FieldTwo = queryMaterialized.FieldTwo ?? 0
    });
}

itemsListFromDbQuery永远不会是null