巨大的CPU开销的问题
我在vb.net 2005中编写应用程序。该应用程序使用ADO.NET将数据表读入DataSet中,并使用该表的列填充ListBox。当选择一个列表框项目时,将向用户显示所选记录的详细信息。这些信息巨大的CPU开销的问题
一部分是不是在DataSet。我必须将电子表格中的一列与多个外部数据源进行比较,以确定相关记录的性质。这是我遇到问题的地方。
此比较必须在一个阶段搜索SQL表中的9.5m行。我已经检查过,因为我已经只搜索绝对必要的数据,所以无法“缩小”查询。
会发生什么情况是,应用程序就明显没有做任何事情。不管之前是什么,CPU使用率都达到100%,系统的性能几乎变得难以忍受。
任何人都可以提出一种方法,我可以改善这种情况,而这个大规模的查询运行?
编辑:我本来打算写数据库表中的9.5m行的内容到一个文本文件,然后我读取,但6.5m行后,我得到一个OutOfMemoryException。
我怀疑你的CPU可能被用来填充DataSet
,虽然你必须分析你的应用程序来确认。尝试使用DataReader
代替,结果无论是存储在内存部分更紧凑的格式,或者,如果你正在运行的内存,然后将它们写入文件,当您去。使用DataReader
方法,您无需同时将整个结果集存储在内存中。
正确!我试过DataReader,结果几乎立即出现在我的表单上。对DataSet方法的一个重大改进。 感谢您的建议:) – 2010-07-23 09:52:20
- 要搜索的列中的索引?
- 表中的一个新的领域,以帮助更快地进行搜索?
1.我需要通过一个特定的列进行搜索,我正在这样做。 2.您能详细说明表格中的新字段以帮助更快地搜索吗? 该数据库包含了公司的客户信息,我需要经过几道审批之前,我可以进行更改表模式。了解我的老板,我非常怀疑他会发现这是必要的。 – 2010-07-23 07:35:11
如果搜索是一样的东西颜色为“红色”,你可以添加一个整数列,可以插入,列举颜色的可能值,或者,在Oracle位图索引可以帮助。 – onof 2010-07-23 08:29:46
'SELECT TelephoneNumber,FirstName FROM Clients WHERE TelephoneNumber ='“&CallData.Tables(0).Rows(i)(2).ToString&”'“'是我的选择语句,我选择的是电话号码,因为这是只有我在电子表格中有这个表格的信息,这个想法是,如果电子表格中的数字出现在这个表格中,那么电子表格中详细描述的电话不是个人电话,因为呼叫是在客户端上列出的电话号码详细信息 – 2010-07-23 09:08:30
你能确切说明当CPU使用率激增到100%,即。你的代码在做什么来实现它?分析它可能会有所帮助。 – EMP 2010-07-23 06:56:36
当应用程序访问数据库时,CPU使用率升高。我已经将它设置为执行一个SQL查询,按照我正在搜索的字段值进行过滤。如果找到任何结果,则使用这些结果填充DataSet,否则DataSet将保持Nothing。 这是CPU高峰的地方。我已经让它运行了一两次,最终抛出了OutOfMemoryException。 – 2010-07-23 07:32:47