簡體   English   中英

C#代碼與SQL Server 2008存儲過程的性能比較

[英]C# code and SQL Server 2008 stored procedure performance comparison

我正在使用C#、. NET 3.5框架和SQL Server 2008 R2開發高頻交易應用程序。 我正在訂購70台儀器,每台儀器我要存儲1分鍾的柱線。 每種工具的每個柱形包括Open PriceHigh PriceLow PriceClose Price ,交易Volume

我在主鍵為StockID一個公用表中將每種樂器的所有一分鍾條推StockID

現在,進行一些計算。 我將需要從1分鍾酒吧構建5分鍾酒吧,10分鍾酒吧,15分鍾酒吧等。 示例:我將循環遍歷1分鍾柱的最后5行,並構造第1條柱,其柱尺寸= 5分鍾。 在5分鍾內,我需要找到Open PriceHigh PriceLow PriceClose Price ,交易Volume 同樣,我將需要180分鍾5分鍾的時間。 因此,我將需要180 * 5 = 900行的1分鍾柱。 (從900開始,我將每5分鍾構造180行)

  1. 如果我從C#代碼中執行一個簡單的Select語句以獲取全部900個1分鍾數據,然后循環並在我的C#代碼中使用5分鍾的條形創建180個數據,則在每5分鍾的條形中獲取開盤價,高價,收盤價,交易量。

  2. 或者,我編寫一個SQL存儲過程來執行上述操作,並將所有5分鍾柱的180個數據的開盤價,高價,低價,收盤價和交易量返回到C#代碼。

我的問題是,這將比1)或2)快得多,而1)或2)會更強大

希望我已經詳細闡述了我的問題和方案,以供專家指導。

您正在考慮“循環”。 在關系數據庫上,您應該考慮“集合”。 在存儲過程中使用循環通常是使用游標完成的。 它很慢(比面向工作集的速度慢50到100倍),並且與游標關聯的鎖定機制可能會鎖定其他進程。 因此,您應該始終避免使用它們。

最快的解決方案是使用存儲過程。 不能對此進行討論。 最大的區別是,它切斷了所有網絡流量。 SP可以直接在數據庫上運行,而不會降低網絡流量。 雖然調試它們可能會很麻煩,但是我聽說Visual Studio 2010在此方面進行了一些改進。

您應該考慮的下一件事是如何實現存儲過程:您可以采用循環和游標的緩慢鎖定方式,也可以采用面向快速設置的方式。

根據您的描述,您可能會在兩個表通過保持一些數據獲得了很多表現在:一個正則表的所有數據,另一個是“窗口表”只認為你需要填充這些5分鍾的數據, 10分鍾和15分鍾,...巴。 如果您可以使用最近5分鍾的三個小柱的數據創建15分鍾柱,然后將這3個最后5分鍾的柱形存儲在窗口表中,當第4個5分鍾柱到達時,踢出最早的5分鍾條並插入新的5分鍾吧。 當您可以基於最近的2個15分鍾條創建新的30分鍾條,然后存儲這2個15分鍾條時,....嘗試使該窗口標簽盡可能小,以便它可以保留在所有時間。

  • 存儲過程解決方案更快。 至少因為不需要在sql服務器和c#應用程序之間傳輸所有需要的數據;
  • 但是,我認為存儲過程的重復性較小,很難維護。

暫無
暫無

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

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