2010-06-08 29 views
1

我正在構建的窗口應用程序是用於非常低端的機器(最大128內存的賽揚)。從哪一個是最好的以下兩種方法(我不希望該應用程序成爲低端機內存豬): -這是一個問題,如果我一次又一次地查詢SQL Server 2005和2000?

方法一: -

查詢數據庫Select GUID from Table1 where DateTime <= @givendate這是我回國超過300,000條記錄(但只有一個字段,即GUID - 300,000個GUID)。現在運行一個循環來實現基於GUID的該軟件的下一個進程。

第二種方法: -

查詢數據庫Select Top 1 GUID from Table1 where DateTime <= @givendate用一次又一次的頂部1,直到完成所有30萬條記錄。它一次只能返回一個GUID,我可以進行下一步的操作。

你認爲哪種方法會使用較少的內存資源? (速度/性能不是這裏的問題)。

PS:數據庫也是在本地機器上(MSDE年或2005年快遞版)

回答

0

使用方法1並使用SQLDataReader來遍歷數據而不消耗內存。

+0

哦,你好。我差點忘了SQLDataReader(使用SQlDataAdapter這麼多..)謝謝我會先試試這個... – Jango 2010-06-08 14:42:09

0

如果你只有128 MB的RAM,我認爲2號將是你最好的辦法......是說可以」 T優做SET based與存儲過程也許,這樣所有的處理將在服務器

+0

不幸的是,數據庫也在本地計算機上(MSDE或SQL Server 2005 express) – Jango 2010-06-08 14:20:18

+0

您有128 MB RAM並運行SQL Server? – SQLMenace 2010-06-08 14:24:23

+0

是的,先生,那是我們超過1000個地點的情況...我的這個新應用程序正在刪除數據庫中未使用的舊記錄以釋放空間(但是使用第三方軟件刪除 - 不是直接從數據庫中刪除) – Jango 2010-06-08 14:31:31

0

。如果內存使用是一個問題發生了,我會考慮本地數據緩存到磁盤。然後您可以使用FileStream對象從文件中讀取數據。

你的號碼2解決方案將非常慢,並給數據庫服務器帶來很多負擔。

0

我會有一個分頁啓用存儲過程。

我會以1k行的塊進行測試,並從那裏進行測試,直到獲得最佳性能。

usp_GetGUIDS @from = 1, @to = 1000 
2

我會採用混合方法。我會一次選擇50個記錄,而不是一個。這樣,您不會加載整個記錄的數量,但您也大大減少了對數據庫的調用次數。

+0

在檢索1行所需的內存量方面,您還應該能夠處理N行。困難的部分當然是確定N ... – 2010-06-08 14:27:46

0

這可能是你完全inaproprite的做法,但如果你是擔心性能,你的機器是低規格的,我會嘗試以下方法:

  1. 您的SQL服務器移動到另一臺機器,因爲這消耗了大量資源。
  2. 另外,如果你沒有那麼多記錄,那麼存儲爲XML或SQLite,並且完全擺脫SQL服務器?
相關問題