2010-07-23 64 views
1

我在vb.net 2005中編寫應用程序。該應用程序使用ADO.NET將數據表讀入DataSet中,並使用該表的列填充ListBox。當選擇一個列表框項目時,將向用戶顯示所選記錄的詳細信息。這些信息巨大的CPU開銷的問題

一部分是不是在DataSet。我必須將電子表格中的一列與多個外部數據源進行比較,以確定相關記錄的性質。這是我遇到問題的地方。

此比較必須在一個階段搜索SQL表中的9.5m行。我已經檢查過,因爲我已經只搜索絕對必要的數據,所以無法「縮小」查詢。

會發生什麼情況是,應用程序就明顯沒有做任何事情。不管之前是什麼,CPU使用率都達到100%,系統的性能幾乎變得難以忍受。

任何人都可以提出一種方法,我可以改善這種情況,而這個大規模的查詢運行?

編輯:我本來打算寫數據庫表中的9.5m行的內容到一個文本文件,然後我讀取,但6.5m行後,我得到一個OutOfMemoryException。

+0

你能確切說明當CPU使用率激增到100%,即。你的代碼在做什麼來實現它?分析它可能會有所幫助。 – EMP 2010-07-23 06:56:36

+0

當應用程序訪問數據庫時,CPU使用率升高。我已經將它設置爲執行一個SQL查詢,按照我正在搜索的字段值進行過濾。如果找到任何結果,則使用這些結果填充DataSet,否則DataSet將保持Nothing。 這是CPU高峯的地方。我已經讓它運行了一兩次,最終拋出了OutOfMemoryException。 – 2010-07-23 07:32:47

回答

3

我懷疑你的CPU可能被用來填充DataSet,雖然你必須分析你的應用程序來確認。嘗試使用DataReader代替,結果無論是存儲在內存部分更緊湊的格式,或者,如果你正在運行的內存,然後將它們寫入文件,當您去。使用DataReader方法,您無需同時將整個結果集存儲在內存中。

+0

正確!我試過DataReader,結果幾乎立即出現在我的表單上。對DataSet方法的一個重大改進。 感謝您的建議:) – 2010-07-23 09:52:20

0
  1. 要搜索的列中的索引?
  2. 表中的一個新的領域,以幫助更快地進行搜索?
+0

1.我需要通過一個特定的列進行搜索,我正在這樣做。 2.您能詳細說明表格中的新字段以幫助更快地搜索嗎? 該數據庫包含了公司的客戶信息,我需要經過幾道審批之前,我可以進行更改表模式。瞭解我的老闆,我非常懷疑他會發現這是必要的。 – 2010-07-23 07:35:11

+0

如果搜索是一樣的東西顏色爲「紅色」,你可以添加一個整數列,可以插入,列舉顏色的可能值,或者,在Oracle位圖索引可以幫助。 – onof 2010-07-23 08:29:46

+0

'SELECT TelephoneNumber,FirstName FROM Clients WHERE TelephoneNumber ='「&CallData.Tables(0).Rows(i)(2).ToString&」'「'是我的選擇語句,我選擇的是電話號碼,因爲這是隻有我在電子表格中有這個表格的信息,這個想法是,如果電子表格中的數字出現在這個表格中,那麼電子表格中詳細描述的電話不是個人電話,因爲呼叫是在客戶端上列出的電話號碼詳細信息 – 2010-07-23 09:08:30