2017-06-21 78 views
0

我正在vb.net上的儀表板應用程序工作,它已經到了一個點,其中查詢的數量是壓倒性的,並隨着時間的推移使用太多的內存,因爲這將是爲了運行幾個月不停,我想知道是否有辦法顯示長期運行內存使用率低的標籤上的數據庫條目數量。 我給這家代碼如下,並且使用的內存很多(查詢ammount的我要去需要的是14-25之間,所以這是一個問題。低內存使用率查詢

GeneralCommand = String.Format("SELECT * FROM fpscdb001_ws_017.ticket WHERE created_on > cast(dateadd(day, -120, getdate()) as date) AND status_1 = 'In Progress'") 
    sdaAllPending = New SqlDataAdapter(GeneralCommand, conn) 
    Dim num_pending = sdaAllPending.Fill(data_set, "fpscdb001_ws_017.ticket") 
    t_pending.Text = num_pending 
+0

考慮讓一個查詢返回未經過濾的所有數據(如果這是可能在你的情況),然後做這樣的過濾,就像這樣: 'Dim dr as DataRow = MyDataSet.Tables(「TableName」)。Select(「Filter = True」,「SortOrder」)' 這樣你擊中實際的數據庫只有一次。 – braX

+0

如果您構建了一個通用數據表(「SELECT * FROM foo」),那麼您可以過濾該表或對其運行查詢以獲取子集。確保你處置了應該處置的事情 – Plutonix

+0

有沒有辦法讓這個代碼適應我的代碼?我覺得我的代碼對於大量的查詢並不是那麼好,我傾向於爲我的查詢製作新的代碼 –

回答

1

你只想要多少記錄的計數要檢索沒有必要帶回所有的這些記錄到一個數據集,除非你需要使用的數據集。

更改查詢返回的記錄數代替,然後顯示該值。

GeneralCommand = String.Format("SELECT Count(*) FROM fpscdb001_ws_017.ticket WHERE created_on > cast(dateadd(day, -120, getdate()) as date) AND status_1 = 'In Progress'") 
sdaAllPending = New SqlDataAdapter(GeneralCommand, conn) 
Dim num_pending = sdaAllPending.Fill(data_set, "fpscdb001_ws_017.ticket") 
t_pending.Text = data_set.Tables(0).Rows(0).Item(0).ToString() 
+0

你的代碼正是我試圖想出來的新代碼,謝謝一堆,我會試試這個,看看性能是否更好 –

+0

謝謝,它的工作!內存使用從多個演出中僅僅花了幾分鐘就降到了60MB,你救了我的屁股 –