2017-01-26 35 views
0

我有以下情形:我建立一個虛擬的網絡應用程序,拉賠率每一分鐘,存儲所有的事件,比賽,賠率等的數據庫,然後更新UI 。存儲在SQL Server數據庫中的實體的數量龐大

我有這樣的結構:體育>活動>匹配>投注>賠率,我使用的代碼第一種方法和所有的數據庫相關的操作,我使用EF。

當我運行我的應用程序在第一次和我的數據庫是空的,我接收XML與含賠率:〜16個體育項目,〜145個事件〜675場比賽,〜17100個投注&〜72824賠率

這裏談到的問題:如何保存及時所有這些實體?解析不是耗時的操作 - 0.2秒,但是當我嘗試散裝儲存所有這些實體我面對記憶問題和節省了超過1分鐘這樣一個奇數拉被觸發,這是一場噩夢。

我看到某處禁用Configuration.AutoDetectChangesEnabled並重新創建每個100/1000記錄我插入我的背景,但我幾乎沒有在那裏。每一個建議將不勝感激。在此先感謝

+0

「但我幾乎不在那裏」意思是你試過了,看到它沒有多大作用?我個人面臨批量操作的類似問題,而'Configuration.AutoDetectChangesEnable'和重新創建上下文有點幫助,我發現完全不同的方式。 –

回答

0

我理解你的處境,但是:

你一直在做你的機器規格的所有操作這一切都取決於和 軟件本身。

現在,如果機器的規格不能處理的過程中這將是一次 變化的計劃,希望限制被插入,直到 的記錄的計數這一切工作要做。

1

當你插入巨大的數據量(雖然不是那麼龐大)時,請嘗試使用SqlBulkCopy。您也可以嘗試使用Table Value Parameter並將其傳遞給存儲過程,但我不建議將其用於此情況,因爲TVP在1000以下的記錄中表現良好。SqlBulkCopy超級易於使用,這是一大優勢。

如果您需要對許多記錄進行更新,那麼您可以使用SqlBulkCopy,但也可以使用的小技巧。創建一個臨時表,並插入使用SqlBulkCopy到臨時表中的數據,然後調用存儲過程,它會從分段表中獲取記錄和更新目標表。對於這兩種情況,我都使用SqlBulkCopy多次,它的工作非常好。

此外,與SqlBulkCopy你也可以批量插入,並提供反饋給用戶,但是,在你的情況下,我不認爲你需要這樣做。但是,這種靈活性在那裏。

我能做的只有用EF呢?

我還沒有試過,但有this圖書館,你可以嘗試。

+0

使用SqlBulkCopy我能夠存儲1.8萬個實體的80k大宗實體,但由於這不是EF的一部分,我可以只使用EF嗎? –

+0

EF沒有直接支持批量操作,但您可以購買添加此功能的庫。它被稱爲「實體框架擴展」。或者你可以自己寫,就像我一樣。 – Amy

相關問題