簡體   English   中英

C#執行多個SQL語句

[英]C# Execute Multiple SQL Statements

我有一個存儲更新語句的類。 我無法在並行for循環中執行這些語句,因為這會導致死鎖。

循環完成后執行語句,在100行的情況下,它可以正常工作。 但某些情況會產生超過100,000個語句。 在順序循環上執行這些語句需要太長時間。

我希望實現的是,在向類中添加100個語句后,我在一個單獨的線程上執行這些語句,並清除語句變量,以便可以添加和執行下一個100。

我是多線程的新手。 這可以實現嗎? 如果不是我用什么其他選項來減少執行時間。 請注意,我無法更改語句邏輯,因為附加了許多其他因素。

讓我進一步澄清我的情景。 我擁有的這個表更像是一個日志表,它跟蹤轉移到客戶端的sql行,因此我不會重新發送同一個對象兩次。 這是為了減少帶寬使用,因為對象通過互聯網鏈接傳輸。

一旦我收到客戶的回復,我就會執行每個聲明。 當循環順序時,這很有效,但事實證明它太慢了。 所以我選擇使用parallel for循環。 這是所有問題出現的地方,因為同一個表幾乎同時被選中,插入和更新導致死鎖。

所以我決定將語句保存在稍后執行的字符串列表中。

我嘗試使用string.join將所有字符串轉換為單個字符串,但這給了我系統內存不足的異常。 從而逐個順序執行它們。 現在轉移需要5分鍾,執行需要30分鍾。 所以我正在尋找解決方案..

因為聽起來你不斷地繼續將新東西插入到數據庫中,所以你可以使用SqlTransaction ,只要它們可用就會執行它們。 然后,偶爾你提交交易。

檢查MSDN以獲取有關如何使用它的示例。

編輯:如果你在另一方面獲得了很多要在一個堆中執行的語句,請盡可能使用SqlBulkCopy,如LoztInSpace所說。

我已經取得了巨大的成功,將SQLBulkCopy用於臨時表,然后對其執行UPDATE(實際上是MERGE,但原理相同)。

我們得到了5分鍾的批次到幾秒鍾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM