2013-03-27 100 views
1

我有一種方法可以將用戶的信息使用linq轉換爲sql類。該方法使用調用現有存儲過程的linq語句執行三個查詢。這裏是我如何佈置我的linq語句的一個例子。Linq to Sql TImeout問題

  using (var db = new TestDataContext(connection))) 
      { 
       var user = db.proc_UserInfo(userId); 

       foreach (var x in user) 
       { 
        string FullName = x.FirstName + " " + x.LastName; 
        string Address = x.Addr1; 
        string City = x.City;       
       } 
      } 

該方法通過一個web api控制器調用,該控制器從jquery ajax請求中觸發。它工作正常,但是當我通過匆忙地改變完成用戶的下拉列表來增加ajax請求的負載時,我注意到如果我可以做得足夠快,看起來像去db的一批查詢被取消並且調用被暫停幾分鐘,接下來的查詢超時並返回空對象。有一點需要注意的是這些查詢不會返回,而是返回幾行數據。我仍然在試圖弄清楚發生了什麼事情並願意接受建議。提前致謝。

+1

proc_UserInfo手動執行它時需要多長時間運行?執行計劃是什麼樣的?它可能只是返回幾行,但你確定你沒有廢棄你的表來獲得這些行嗎? 還要考慮到每個Ajax請求可能會導致另一個工作線程在IIS中產生,並且您可能會窒息您的SQL客戶端(假設它是sql server)連接池。 另外,你可以考慮通過在你的ajax請求之前禁用下拉列表來避開這個問題,並且不要在ajax完成之前重新啓用它,以阻止人們對你進行操作:) – 2013-03-27 22:12:08

+0

感謝自從我發佈我一直在嘗試再次打破它,沒有骰子。它已經在不到一秒的時間內回覆這些請求。我將禁用下拉菜單作爲第二種預防措施,並嘗試加載測試我的Web服務。謝謝斯蒂芬。 – vikingben 2013-03-27 23:26:12

回答

1

首先我想人們可能需要更多的信息。我假設的數據庫類型是SQL Server,但你還沒有列出一個版本。無論如何,這可能是一些事情。請記住,AJAX調用是以http請求/帖子的形式運行的,因此可能存在IIS超時或其他各種IIS限制。另外,你的調用是否是異步的?Jquery有一些你可能想要驗證的設置。表鎖定是SQL Server也是一種可能性。同時檢查瀏覽器的ram/w3wp用法以確保它沒有用完資源。

首先我建議運行SQL事件探查器來驗證發生了什麼,然後檢查這些查詢的執行計劃。如果數據量很大,則可能需要一些索引。

+0

感謝Andrew的迴應,我們正在運行SQL 2008服務器。我感謝SQL探查器的建議,我一定會檢查這些查詢。 – vikingben 2013-03-27 23:31:13