實體框架非同步:一個重大的效能瓶頸
本文詳細介紹了使用實體框架的非同步方法時遇到的效能問題。 作者發現,與同步查詢相比,非同步查詢的執行時間增加了十倍。
問題:同步查詢在幾秒鐘內完成,而非同步查詢則花費了十倍的時間。
偵錯問題: SQL Server Profiler 確認同步和非同步呼叫的 SQL 查詢相同。 進一步調查發現了罪魁禍首:非同步操作產生了超過 200 萬個任務,並產生了巨大的開銷。
根本原因: 這個問題源自於 Entity Framework 6 非同步實作中的錯誤。 當處理包含大型二進位列的表時,框架應在非同步呼叫中自動使用 CommandBehavior.SequentialAccess
標誌。 這個關鍵的優化缺失了。
解決方案: 作者建議繞過實體框架的內建非同步方法。 使用 TaskCompletionSource
的解決方法允許手動非同步執行,確保 CommandBehavior.SequentialAccess
正確應用於具有大型二進位資料的表。
主要觀察:
CommandBehavior.Default
.以上是為什麼我的實體框架非同步操作比同步操作慢 10 倍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!