2017-06-21 76 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,你救了我的屁股 –