2016-07-06 9 views
-6

私は20のフィールドを持つC#クラスを持っており、リスト "A"(クラスオブジェクトのリスト)をループし、リスト "A"のすべての値をリスト "B"オブジェクト)。 List Aの値の最大数は常に160レコードを超えません。操作が完了取得するためC#リストのパフォーマンスを向上させる

それは私に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); 
      } 
     } 
    } 
} 
+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); 

イーガーロード。

関連する問題