2016-11-23 31 views
0

我是一個在web應用程序中工作的.net開發人員,從過去的幾個月開始,我開始研究Windows應用程序,並且每天中午12點需要運行一個應用程序,所以我在谷歌的幫助下編寫了一個web服務,它工作正常。與任務調度程序或任務管理器相比,窗口服務如何在內部工作?

但我只是想知道Windows服務是如何工作的。 我讀了很多帖子,沒有人回答我的問題。所以我用我自己的話說出來。

根據我在Web服務中的理解,我創建了一個使用定時器的調度器,該定時器運行了24小時,並在定時器條件滿足時執行必要的代碼。

在調度程序中,我配置了一個調度程序,該程序在滿足時間條件時運行應用程序(這是前一種情況下的服務)。

現在我的問題:

  1. 關於RAM使用?

    我知道服務使用RAM。但考慮如果我的代碼是沉重的,讓我們考慮10MB。此前.exe文件將在10mb或更多。所以當服務啓動的時候,它會在24小時內使用10MB的RAM,否則它只會在服務中創建一個非常小的調度程序,然後在滿足時間時加載服務代碼?

    考慮調度程序它是如何工作的。我認爲會有觸發器被觸發,當時間滿足和觸發觸發器將執行.exe文件一般讓我稱之爲服務(但它是一個應用程序)。所以這裏服務代碼與調度程序分開,所以只有調度程序運行並將服務代碼加載到RAM中。

對嗎? 調度程序是否也運行24小時檢查時間?

  1. 如果萬一我有一個安裝程序的2個服務。現在將安裝2個servises。但我想知道,如果兩個服務都是10mb每個使20mb的.exe大小,並且當兩個服務開始運行時,每個服務的大小都是10MB(考慮它將推薦相關的服務代碼)或每個20MB(考慮它將指示兩個服務代碼,因爲它們在相同的exe中)。

希望得到一些有價值的答案。

在此先感謝。

+0

如果你需要一些代碼,每天只運行一次 - 你根本不需要服務,只需使用Windows任務計劃程序來運行你的.exe(控制檯應用程序)。 – Evk

+0

是的。我明白那個。但那不是我的問題。我的問題不是我應該選擇哪一個。我的問題是他們在內存,RAM和代碼執行邏輯方面的工作方式是不同的。 –

回答

0

一切都取決於您的實施。

這是一個Windows服務是如何工作的:

  1. 你安裝程序將註冊一個Windows服務對象
  2. 服務對象開始yourservice.exe
  3. yourservice.exe你必須實現服務命令(例如。:OnStartOnStop
  4. 現在,它取決於你在這些方法中做什麼爲
  5. yourservice.exe運行,只要在服務運行

我的建議:

  1. 收拾好你現有的邏輯進入庫
  2. 啓動服務中的定時器OnStart方法(定時器幾乎不需要資源)
  3. 在計時器回調使用圖書館(現在的10兆分配)
  4. 清理一切工作完成後實例化邏輯(10兆得到釋放,如果你不使用任何持久)

在第3步中,你可以自由地實例化你的邏輯兩次,然後當然會使用兩個10兆。