【发布时间】:2016-11-09 03:18:41
【问题描述】:
我有一个包含 20 个字段的 C# 类,我正在循环遍历 List "A"(类对象列表)并将 List "A" 中的所有值添加到 List "B"(类对象列表)。在任何给定时间,列表“A”中值的最大数量都不会超过 160 条记录。
我需要 25 秒才能完成操作(循环通过列表“A”并将它们添加到列表“B”)
我尝试将列表更改为HashSet,并将执行时间减少到 19 秒。我能做些什么来显着提高性能,即将它降低到 2-3 秒。有什么建议吗?
var products = new List<ProductDto>();
using (var _userEntities = new UserEntities())
{
UserDto user = GetUserDto(userEmail, _userEntities);
if (user != null)
{
var users = _userEntities.Where(x.User.userId == user.Id);
foreach (User user in users)
{
if (_userEntities.Products.FirstOrDefault(y => y.userId == user.Id) != null)
{
var Product = new ProductDto()
{
Id = user.Id.ToString(),
ProductId = user.Product != null ? user.ProductId : string.Empty,
Name = user.Product != null ? user.Product.Name : string.Empty,
SalePrice = user.SalePrice == null ? string.Empty : user.SalePrice.ToString(),
OrderId = user.OrderID,
CreatedDate = user.CreatedDate,
HasChildItems = user.Product != null && user.Product.HasChildItems != null && user.Product.HasChildItems ? true : false,
OrderNumber = user.OrderNumber,
};
products.Add(Product);
}
}
}
}
【问题讨论】:
-
所以你只是在做
listB.AddRange(listA);? -
这个操作完全没有理由花费这么长时间。问题不在于列表本身,而在于您正在使用它做什么。请发布您的相关代码。
-
如果能提供一些代码就好了。
-
@DavidL 添加了代码
-
正是我所怀疑的。您在这里有一个经典的 select n+1 查询。问题不在于清单。这是您正在生成的 sql 查询的数量。
标签: c# list performance-testing