2011-06-22 34 views
0

我正在開發一個大型網站,當我使用SQL Profiler檢查linq查詢時,我發現大約有30個登錄/註銷操作。我想通過對所有DataContext使用開放連接來減少這些操作,但我不知道如何去做。你有什麼建議嗎?對所有Linq DataContext使用開放連接

回答

0

這是一個非常糟糕的主意 - 您正在創建大型可擴展網站,因此讓Linq-to-sql處理連接本身。

Linq-to-sql在內部處理連接打開和釋放的有效方式。它使用默認的ADO.NET連接池,因此連接可以正確重用,並且不會爲每個上下文打開。

對所有上下文使用單一連接正是使您的應用程序不可擴展且無法正常工作的原因。單連接只允許單個事務,所以一旦兩個請求想要進行併發更改並使用自己的事務,應用程序就會崩潰。

不共享上下文並且不共享連接 - 讓ADO.NET處理連接池併爲每個請求創建新的上下文,否則您可能會遇到嚴重問題。

+0

謝謝你,我會那麼做。 – Alireza

+0

@LadislavMrnka - 從你的答案聽起來,創建一個DataContext實例並不意味着創建一個新的數據庫連接。你能確認嗎?我讀到的每一處似乎都表明了另一種情況你可以請提供一個鏈接到數據庫連接如何創建和發佈的情況下linq到SQL? – Brian

+0

@Brian:這不是關於linq-to-sql,而是關於連接到SQL服務器時默認使用的連接池。您可以考慮重用網絡連接(而不是每次DataContext需要獲取或保留數據時都打開它)。 –