2017-06-21 11 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

フィルタリングされていないすべてのデータを返すクエリを1つ作成することを検討してください(可能であれば)次にこのようなフィルタリングを行います: 'Dim dr as DataRow = MyDataSet.Tables(" TableName ")選択(" Filter = True "、" SortOrder ")' 実際のデータベースは1回だけです。 – 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に減少しました。 –

関連する問題