2010-06-05 66 views
0

我有一個應用程序需要不斷(每50ms),調用MVC操作以及拾取/丟棄數據。我使用LINQ to SQL和MVC是因爲它們實現起來有多簡單,而且我知道它們在性能方面並不完美,但它運行得相對較好,但速度卻可以達到最快我目前的做法是200毫秒(沒有請求重疊)。Linq to SQL和實時數據

每次對該站點的調用都會創建一個新的datacontext實例,查詢/插入並返回該數據。

有沒有辦法讓datacontext是靜態的,但是每隔5秒提交一次changechanges,這樣我幾乎可以打到內存中的數據?

編輯:

我建立一個包含所有相同的屬性和我的上下文對象完全脫開架構,我靜態聲明上的Application_Start()該對象,並在每一個X的請求,一個線程旋轉以附加所有斷開連接的對象並將其存儲到數據庫中。

這已經成功地減少了我的往返時間縮短到只有100毫秒,有很大的改進,但它是從窗臺它需要爲「實時」

我越來越到的水平不足微優化,但我似乎無法更快地推動它。

回答

1

DataContext是爲了在您每次進入數據庫時​​創建的。這不應該是一個瓶頸。

如果您擔心數據庫連接的昂貴創建,那可能不成問題。有一個小的連接輪詢,所以連接被後續調用重用。

你可以做什麼來提高性能(我沒有聽說過它現在很差)現在是用存儲過程替換自動生成的SQL。您將節省一點執行計劃的重新創建。

0

CompiledQuery可能有助於提高性能。但它永遠不會比傳統的ADO.NET更快。如果性能是主要關注的話,任何ORM都是非常糟糕的選擇。

您可以隨時混合使用(Linq2SQL + ADO.NET)以實現最佳性能。

0

我不認爲創建一個LINQ上下文/查詢是你的瓶頸在這裏。使用它有點小的開銷(就像任何ORM一樣),但除非你創建了大量的上下文和複雜的查詢樹,否則它對你來說不應該是重要的。

我的猜測可能是,LINQ不會生成您所期望的查詢。如果你不小心,它實際上可能會產生一堆查詢,並嘗試從多個表中獲取。如果你想找出查詢時開始運行,就可以使用

context.Log = Console.Out; // Or some other stream 

您還可以使用出色的LINQPad嘗試查詢。如果這不是問題,您應該使用探查器來剖析您的代碼,我個人喜歡dotTrace