2016-08-18 12 views
-1

私は、LiteDBソースから来る〜5000 DataItemsのBindingSourceを使ってDatagridViewを作成しました。これらのDataItemには小さなプレビュー画像が含まれています。dotNet C#DataGridViewデータバインディングのパフォーマンス

私の問題と質問:Databindのパフォーマンスをどうにか向上させることはできますか?それとも間違って使っているのですか?

ここ

が私のDataObject

public class VEFile 
{ 
    public VEFile() 
    { 
     Tags = new List<VETag>(); 
    } 
    public static DateTime LastPlaybacked { get; set; } 

    public string Path { get; set; } 
    public string FileName { get; set; } 
    public string LastAccessed { get; set; } 

    public byte[] Thumbnail { get; set; } 
    public List<VETag> Tags { get; set; } 
    [System.ComponentModel.Browsable(false)] 
    public string Id { get; set; } 
    public DateTime LastModified { get; set; } 
    public long FileSize { get; set; } 
    [BsonIndex] 
    public int ViewCount { get; set; } 
} 

そして、私のデータバインディングコード:

using (var db = new MyLiteDatabase(connectionString)) 
     { 
      var filesCollection = db.GetCollection<VEFile>("files"); 

      var results = filesCollection.Include(x => x.Tags).FindAll().OrderByDescending(x => x.LastModified); 

      originalBindingList = new BindingList<VEFile>(new List<VEFile>(results)); 
      bindingSource1.DataSource = originalBindingList.OrderByDescending(x => x.LastModified); 
     } 

最後の行

 bindingSource1.DataSource = originalBindingList.OrderByDescending(x => x.LastModified); 

は数秒プラス〜2ギガバイトまでのRAM使用量のランプのためのハングアップその後すぐに落ちる。

答えて

0

ページングを使用する必要があります。 DataSourceオブジェクトは、TotalNumberOfItems、CurrentPageIndex、PageSizeプロパティを設定することでこれをサポートします。

次に、PageSize行数のみを選択するようにクエリを調整します。 LINQのTakeメソッドとSkipメソッドを使用します。

関連する問題