我正在處理一個批處理過程,它將緩慢的遺留數據庫(每個記錄獲取時間1.4-2ms)累積到800,000條記錄到MySQL中執行更快一點。爲了優化這一點,我一直在將所有的MySQL記錄加載到內存中,使用量大約爲200MB。然後,我開始從遺留數據庫轉儲並更新記錄。實體框架從上下文中刪除對象,但不是從數據庫中刪除對象
最初,當這將完成更新記錄時,我會調用SaveContext,然後使我的內存從500MB-800MB跳到1.5GB。很快,我就會發現內存異常(運行的虛擬機有2GB內存),即使我給它更多的內存,1.5-2GB仍然有點過分,並且只會將一個帶 - 幫助解決問題。爲了解決這個問題,我開始每調用一次10,000條記錄就調用SaveContext,因爲我使用委託來從舊數據庫中獲取數據並在MySQL中更新它,但是從性能方面來說, 5秒鐘左右,等待它保存它,然後運行內存中的更新,爲已備份的3000條記錄進行更新。但是,內存使用量仍然在不斷增加。
這裏是我的潛在問題:
- 的數據出來,在任何順序遺留數據庫的,所以我不能塊的更新和定期發佈的ObjectContext。
- 如果我沒有事先獲取MySQL中的所有數據,而是在更新過程中通過記錄查找它,它非常慢。我反而把它全部抓住,將它轉換爲由主鍵索引的字典,當我更新數據時,我從字典中刪除記錄。
一個可能的解決方案,我認爲是以某種方式釋放正在使用的,我知道,因爲他們已經被更新我再也不會去碰實體內存(比如清除緩存,但只針對特定項目),但我不知道Entity Framework是否可能。
有沒有人有任何想法?
EF似乎不適合這份工作。你爲什麼不直接遷移數據? – Pawel
使用SSIS遷移數據 – fenix2222