none
關於window service的兩個疑問 RRS feed

  • 問題

  • 請教大家兩個問題:

     

    1、在下用C# 2005 Express,發現開新專案時,並沒有內建window service的樣版可以直接用…請問這部份微軟有提供額外下載來安裝嗎?還是說一定要買付費版才有?也就是Express只好憑空手動打造了?

     

    2、假設一個Window Service,設定每分鐘做事,但不幸地事情量很多,每次做,都必須超過1小時才能做完,那1小時後,是否等於開了60個執行緒?

    假設程式本身又固定開3個執行緒在做,那1小時後就有180個thread在做事了??

    這樣thread是否有可能爆掉?

     

    先謝謝回答

    2007年3月28日 下午 02:27

解答

  • 據我所知,沒有,Visual Studio Express 本來就不是給 Professional Developer 用的,所以一些進階功能沒有 .

     

    "假設一個Window Service,設定每分鐘做事,但不幸地事情量很多,每次做,都必須超過1小時才能做完,那1小時後,是否等於開了60個執行緒?",當滿 60 分鐘時,所有的工作都在執行時,你的這句話是對的,但執行緒必須要你自己開,Windows Service 只是把行程放在背景中而已,"每分鐘要執行動作" 這件事的 Timer,也必須要由你自己設定 .

     

    Thread 的多少會受到記憶體的限制,180 個執行緒,你可以想像一台 SQL Server 有 180 個使用者同時連到 SQL Server 存取資料,因為 SQL Server 每一個連線都會開一個執行緒,而 SQL Server 可用連線除了本身的限制外,還會被記憶體的量所限制 .

     

    如果記憶體很夠,那 1800, 18000 個執行緒都可以吃的下,但重點是是否要做到這種程度,而且記憶體的使用最好是測試期要監控好,確定它可能的損耗量,做為評估硬體的參考 .

    2007年3月28日 下午 02:41
    版主

所有回覆

  • 據我所知,沒有,Visual Studio Express 本來就不是給 Professional Developer 用的,所以一些進階功能沒有 .

     

    "假設一個Window Service,設定每分鐘做事,但不幸地事情量很多,每次做,都必須超過1小時才能做完,那1小時後,是否等於開了60個執行緒?",當滿 60 分鐘時,所有的工作都在執行時,你的這句話是對的,但執行緒必須要你自己開,Windows Service 只是把行程放在背景中而已,"每分鐘要執行動作" 這件事的 Timer,也必須要由你自己設定 .

     

    Thread 的多少會受到記憶體的限制,180 個執行緒,你可以想像一台 SQL Server 有 180 個使用者同時連到 SQL Server 存取資料,因為 SQL Server 每一個連線都會開一個執行緒,而 SQL Server 可用連線除了本身的限制外,還會被記憶體的量所限制 .

     

    如果記憶體很夠,那 1800, 18000 個執行緒都可以吃的下,但重點是是否要做到這種程度,而且記憶體的使用最好是測試期要監控好,確定它可能的損耗量,做為評估硬體的參考 .

    2007年3月28日 下午 02:41
    版主
  • 1、原來Express版真的不提供@@,那請問要手工自己打造,會非常複雜嗎?

    2、若是我設好timer是每分鐘執行一次,但我自己不開執行緒,而是純粹設定window service去做一些事,

    那第2分鐘的時候,若第1分鐘的事還沒做完,則第2分鐘是否就不會做事?(因為該行程還在跑第1次的事)

    2007年3月28日 下午 03:52
  • 1. 你可以看看 .NET Framework SDK 中有關 Windows Service 的說明 .

    2. 試一次就知道了 .

    2007年3月28日 下午 03:55
    版主
  • WebServices的用法
    有同步與非同步

    這兩種

    其中一種會等待WebServices完成

    另一種則不會
    要看用途決定用那一種
    用在網站上的話, 大多要等待完成
    用在AP的話, 可以考慮把處理的流程切開, 用不等待的那種

    如果你要做不等待完成的那種
    又可能扔了很多Work給WebServices去做的話

    你可以參考一下IOCP的運作原理

    透過一個共用的Queue 與你自定數量的執行序
    去做Work的執行控管

    2007年3月29日 上午 08:53
  • 不好意思,我問的是Windows Service,而不是Web Service呢…^^"

    不過還是謝謝你的回文^^

    2007年3月29日 下午 04:42
  • 抱歉
    昨天眼花了

    window service 用C#可以寫
    但是不宜
    1.吃RAM吃太兇 (.NetFrameWork的自動記憶體回收機制, 並不是做得很好)
    2.也有疑似在開機後, Windows第一個User登入桌面前, .NetFrameWork 的RunTime起不來的問題

    所以
    你改用VC++去配合Windows Platform SDK
    來寫
    可能還比較好
    2007年3月30日 上午 01:42
  • 經驗分享

    請不要把Windows Service偵測到的錯誤資料用EventLog輸出,因為如果EventLog使用空間塞爆了,Windows Service會Idle掉,例如Timer就不會動了,一般我都會用文字檔輸出

    2007年4月3日 上午 08:14
  • 對不起,問個題外話,

    針對彼得魚兄的經驗分享有個問題,

     

    如果 event log 使用空間爆掉了

    這句話的意思指的是,當 event 設定的檔案大小達到後,

    並不會自動覆寫 n 天前的事件嗎?所以爆掉?

    還是指的是硬碟空間爆掉?

     

     

    PS.因為最近剛好有寫 Windows Service,

          然後我將一些訊息寫至自已產生的 Event log ,但還沒詳細測試。

    2007年4月7日 上午 02:05