2016-07-06 3 views
-6

У меня есть класс C# с 20 полями, и я перебираю список «A» (список объектов класса) и добавляю все значения из списка «A» в список «B» (список классов объекты) . В любой момент времени максимальное количество значений в списке «А» не будет превышать 160 записей.Увеличение производительности списка C#

Он берет меня 25 секунд для операции, чтобы получить завершена (Перебор списка «А» и добавить их в список «Б»)

Я попытался изменить список на 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); 
      } 
     } 
    } 
} 
+1

Итак, вы просто делаете 'listB.AddRange (listA);'? – DavidG

+3

Нет никакой причины, почему эта операция должна длиться так долго. Проблема не в самом списке, это то, что вы делаете с этим. Отправьте свой соответствующий код, пожалуйста. –

+3

Было бы здорово, если бы вы могли предоставить код. –

ответ

0

Проблема не в длине списка, а в количестве SQL-запросов. Если у вас есть 160 элементов, которые у вас есть в списках 161 sql-операторов, которые, кажется, очень медленны в вашем случае (используйте профилировщик для анализа). Вы можете попытаться изменить свой запрос linq, чтобы присоединиться к требуемым продуктам с пользователями. Я не знаю, модель данных, но это может быть что-то вроде этого:

var users = from u in dbContext.Users.Include(u => u.Product); 

или

var products = from p in dbContext.Products.Include(p => p.User); 

жадная загрузка вместо отложенной загрузки.

Смежные вопросы