Anywhere you go, let me go too

關於部落格
對人海闊天空,做事仔細周密
----------------------
因為改了平台後...覺得不是很好用....所以有另外......(評估中)
http://blog.xuite.net/king119wang/myskills
  • 32543

    累積人氣

  • 2

    今日人氣

    0

    訂閱人氣

多 Process 處理

 我的作法是用Window Service定時去讀取DB看有那些作業待處理,
 將待處理的作業一一呼叫Process去執行....

 好處是可以同時呼叫多個Process去處理,.....茲將碰過的問題及解決方式記下:

(1) 一開始在Window Service 中寫下列方式,如其中一個process做比較久就要等它
                 Process exTraConsole=Process.Start(SendMailDailySrv.sSendMailConsole,sPara);
                  exTraConsole.WaitForExit();   ===> 一個一個Process 處理 
      問題:其它一個Process久久都做不完,導致其它無法進行
      解法:exTraConsole.WaitForExit(1000); //加入等待時間,過了就不等了,處理下一個
(2) 結果因為上述處理,引發了新的問題。直覺得增加了一些Code
                if (exTraConsole != null)
                {
                    if (exTraConsole.HasExited == true)
                    {
                        exTraConsle.Kill();  ============> 怕它不停,浪費資源.....
                        exTraConsole.Close();
                        exTraConsole.Dispose();
               ~略~
       問題:有些處理序,因為網路太忙或Memory資源不足, 需要等久一點,變成沒做完就被Kill()了
       解法:不要加exTraConsle.Kill(); 就讓它自己慢慢作完吧!
 (3)為了讓每個Process有自己的Log,一來清楚,二來比較不會有衝突.....
       問題:Log數量多到不行....IO愈來愈慢了
       解法:將IO全寫的同一個檔
    問題:所有Process都要等前一個IO完才能開始處理
       解法:將Log先全寫至StringBuilder物件中.....待最後finally 要離開再一次寫入
                   一來,可以依各個Process處理情形分段寫入(清楚查問題)
                   二來,Process可以穿插處理
                   三來,Log 一天不會產生太多個

  -----------------------------待觀察-------------------------
20100129
  (4)這樣的寫法不適合短時間資料量大,因為太佔資源了
       一支Process就佔了固定的記憶體,所以改了另一個寫法,
       WindowsService負責定時叫Console做事,
       Coonsole才是進行掃DB,做事的人,
       每次只處理該次起來所屬的待辦事項(DB 加個欄位註記本次Process Id,以利和其它Process不會有有互搶的情形)
       結論:Process不會起太多支,而且每一支不會只做一件事,一來省資源,二來可以清楚畫分每個Process該做那些事 
          
相簿設定
標籤設定
相簿狀態