2011-05-07 27 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

相關問題