2011-04-13 89 views
0

我知道,我今晚有問題模式,EF 4.1 Sql CE性能問題

我正在構建桌面應用程序。幸運的是我選擇了一個開放的架構,因爲我遇到了以下問題:

我的應用程序允許用戶添加操作。在我的測試中,我只添加了易於管理的小型(測試)操作。每個操作都被添加到當前是SQL CE 4.0數據庫的數據存儲中(首先使用EF 4.1代碼進行訪問,這非常棒)。

現在我使用更大的通用操作(數據庫中大約4000行)測試應用程序。而不是幾秒鐘,插入實際上需要幾分鐘!在大表中,只有1個外鍵,當然還有主鍵,但似乎4000行對它來說只是很多。

將所有行插入到1批次中,並且實際性能缺失位於SaveChanges命令上。

我關於使用手動查詢(未經測試)紅了,但這不是首選的選項,因爲事務不支持,它必須是一個孤立的操作。

那麼,我需要一個新的策略嗎?在SQL Server 2008上,您可以執行批量插入,但實際上也不受Sql Server CE支持。

客戶端解決方案與SQL Server CE和輕量級一樣靈活嗎? (例如,我不希望用戶安裝SQL Server,也不使用某些本地組件)。

我可以使用某些形式的序列化,但感覺像重新發明輪子,是很多工作(升級,完整性,多線程訪問等)。

提前致謝!

+0

在插入的表格上是否有很多索引,或者是很多連接? 4000行看起來非常小,插入需要幾分鐘。 – taylonr 2011-04-13 19:57:49

+0

不,沒有索引,只有1個外鍵和1個主鍵。事實上,只有4列只有4個整數 – Polity 2011-04-13 20:07:42

+0

問題是我沒有intellitrace,真的看不到什麼在SaveChanges裏面。我只是看到時間消耗在那裏,只有一大堆數據 – Polity 2011-04-13 20:10:47

回答

0

這兩個答案都很有幫助,但沒有提供解決方案。

我發現這個:http://sqlcebulkcopy.codeplex.com/它提供了一個SqlCeBulkCopy類,它在2秒內工作並執行插入操作!我現在正在將它集成到當前的存儲庫和單元工作模型中。只要我找到最好的解決方案,我會在這裏發佈。

很快就要跟着...

0

問題是在SQL CE上通常插入操作的速度有多慢? EF的問題在於它不會請求一個批次插入4.000條記錄,但它會逐個插入記錄。當前的EF版本不支持命令批處理,因此您在序列中執行4.000個插入。這在大型SQL Server上也是一個問題,但通常速度更快。我能夠在6分鐘內在較慢的桌面上以及在服務器上的三分鐘內向SQL Server插入大約50.000 - 100.000條更復雜的記錄。