2011-05-07 29 views
1

我在C#中创建了一个程序,与Oracle Express(本地实例)中的250万条记录一起工作,解析/拆分这些记录并创建额外的500万条记录。为程序提供所有可能的资源

我添加了一些代码来在屏幕上打印时间,它似乎相当快。它每9秒完成1K记录的所有处理。这意味着完成需要6个多小时。

现在,使用任务管理器,我可以看到该程序正在使用6%的CPU(最大值)和大约50MB的内存。我了解操作系统,甲骨文本身需要资源来操作,但.....有没有办法告诉这个小程序“嘿,没关系,继续前进,使用至少50%的CPU,有4GB的RAM把自己打昏”?

注意:我在Oracle Express中使用本地实例的原因之一是减少网络瓶颈。我也可能不会经常运行这个过程,但我很想看看这是否可能。

请原谅我的noobness,

谢谢!

回答

3

操作系统会给你的程序它需要的所有资源,你的过程不占用所有CPU的原因可能是因为它等待IO子系统比处理器多。

如果你想看看你可以消耗更多的CPU周期试着写的是尽可能快地运行一个短的无限循环的程序,你会看到在CPU使用率的差异。

+1

@Kranky - 鉴于您正在读取和写入数据库,您的应用程序更可能是受CPU限制的I/O限制。 – ChrisF 2011-05-07 22:11:20

+0

我同意,IO子系统可能是瓶颈。我会尝试第二个建议,并在程序运行时监视CPU资源。尽管如此,在它终止并出现堆栈溢出异常之前,我可能只运行一秒钟。 – Ulises 2011-05-09 04:12:30

+1

@KrankyAztec - 堆栈不会因循环而溢出,这通常是由于递归函数调用而发生的。我所建议的是可以消耗100%的CPU,操作系统不会限制你的应用程序。我会在应用程序的I/O代码部分放一些额外的时间代码,以显示计算和输入/输出之间的差异。如BugFinder提示的那样,不可能在Oracle SQL中完成整个操作? – Tony 2011-05-09 08:25:04

0

一些想法,我猜不是真的,但是。

  1. 你可以了应用程序线程的优先级,然而,它有可能是代码也许更少效率比你想的那么...

你有没有在其上运行一个分析器?

  1. 如果它目前是一个单线程应用程序,你可以看看是否可以批量分析它,因此可以并行运行它们。

  2. 不知道了很多纪录分裂的细节,是可以关闭的手,更多的甲骨文做什么?例如,关于网络等等或者本地或其他方面的问题会较少。

  3. 如果您正在绘制/更新屏幕或UI的应用程序,那么它几乎肯定会减慢工作进度。一个例子。我运行了一个应用程序,它将大约10k个电子邮件分成大约250k行到一个数据库中,如果我将一个项目添加到列表框中,每行都会从短暂的变为可笑的,例如,崩溃感到无聊。所以,再次,卸载到线程以尽可能少的UI更新来完成工作可以提供帮助。

+0

感谢您的意见。并行线程化是一个好主意,但唯一关心的将是上面提到的IO瓶颈。 – Ulises 2011-05-09 04:13:34

相关问题