首頁 > 後端開發 > C++ > 為什麼我的實體框架非同步操作比同步操作慢 10 倍?

為什麼我的實體框架非同步操作比同步操作慢 10 倍?

Mary-Kate Olsen
發布: 2025-01-10 18:46:42
原創
519 人瀏覽過

Why is My Entity Framework Async Operation 10x Slower Than Its Synchronous Counterpart?

實體框架非同步:一個重大的效能瓶頸

本文詳細介紹了使用實體框架的非同步方法時遇到的效能問題。 作者發現,與同步查詢相比,非同步查詢的執行時間增加了十倍。

問題:同步查詢在幾秒鐘內完成,而非同步查詢則花費了十倍的時間。

偵錯問題: SQL Server Profiler 確認同步和非同步呼叫的 SQL 查詢相同。 進一步調查發現了罪魁禍首:非同步操作產生了超過 200 萬個任務,並產生了巨大的開銷。

根本原因: 這個問題源自於 Entity Framework 6 非同步實作中的錯誤。 當處理包含大型二進位列的表時,框架應在非同步呼叫中自動使用 CommandBehavior.SequentialAccess 標誌。 這個關鍵的優化缺失了。

解決方案: 作者建議繞過實體框架的內建非同步方法。 使用 TaskCompletionSource 的解決方法允許手動非同步執行,確保 CommandBehavior.SequentialAccess 正確應用於具有大型二進位資料的表。

主要觀察:

  • Ado.Net 在包含大型二進位列和 CommandBehavior.Default.
  • 的表上進行非同步操作時表現出類似的效能下降
  • 對於大型二進位列(作者的測試中為 256 KB),效能差異最為明顯。
  • CPU 使用模式不尋常:同步操作使用 12% CPU,而非同步操作峰值為 20%,暗示潛在的資源爭用。

以上是為什麼我的實體框架非同步操作比同步操作慢 10 倍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板