2011-10-04 33 views
1

如果我使用DataContext DB存儲大量數據。 我發現當數據數量增長時,性能會非常慢。DataContext當數據量很大時性能很差

數據量約爲6000條。

如果我插入一個數據和SubmitChange,SubmitChange將花費1.X秒。

有什麼辦法可以提高性能還是限制.....

謝謝。

+4

** 0%零投票**,也許你需要接受你的問題的答案 – V4Vendetta

+0

首先在手機上,爲什麼你要一次加載或更改6000項,你違背設計原則在手機上製作輕量級高響應應用程序。有必須應用分頁和陰影的概念。 –

回答

2

我沒有自己測試,但嘗試在每次插入後不要調用SumbitChanges()。 執行全部6000個插入,然後只需撥打SubmitChanges()一次。 DataContext應該知道您所做的所有更改。

var _db = new YourDbContext(); 

for(int i = 0; i < 6000; i++) 
{ 
    FoobarObj newObject = new FoobarObj() 
    { 
     Name = "xyz_" + i.ToString(); 
    }; 

    _db.FoobarObjects.InsertOnSubmit(newObject); 
} 

_db.SubmitChanges(); 
+0

我的情況是在芒果WP7 ... 有一些限制像AP不能做超過10秒 如果我積累了太多的數據,submitChange將花費很長的時間。即使使用您提供的代碼,如果數據編號超過5000,插入一個數據將花費約1秒.....太慢。 – user588477

1

一秒鐘聽起來太長了。比我測量的時間長得多。在一個簡單的測試,我只是做了:

using(var dc = new MyDc(@"isostore:/stuff.sdf")) 
{ 
    if(!dc.DatabaseExists()) 
     dc.CreateDatabase(); 

    dc.Data.InsertAllOnSubmit(
     Enumerable.Range(0, 6000).Select(i => new MyData { Data = "Hello World" })); 
    dc.SubmitChanges(); 
} 

我可以在每毫秒的1〜2個項目在6000個批次的速度插入,這仍然是相當穩定的數據量持續增長。如果我將它更改爲較小的批次(如說5個項目),那麼它會下降到每個項目大約10毫秒,因爲在初始化datacontext時存在相當多的開銷,並且支配執行時間。

所以必須有別的事情正在進行。你能否提供一些你正在插入的細節?也許是一個代碼示例,它演示了問題的端到端?