要記錄log,可以用各種方法,EventLog 只是 Windows 本身提供的一種機制,可以用來記錄應用程式的狀況。
2012年2月15日 星期三
Debug and Trace
Debugging and Tracing
Debugger 類別
Debugger 類別讓應用程式可以和偵錯程式溝通。底下是Debugger常使用的方法:
Random r = new Random(); int x = r.Next( 1, 10); if (x > 5) { Console.WriteLine("x > 5"); Debugger.Break(); //這一行程式碼的目的,相當於在此設立中斷點 } Debugger.Log(1, "Test1", "This is a test"); //Log:送出一個訊息到預設的輸出(接聽物件)
監測效能
處理序(Process)
- A process is a memory slice that contains resources.
- An isolated task performed by the operating system.
- An application that is being run.
Process元件提供對電腦上正在執行處理序的存取。 以最簡單的話來說,處理序就是正在執行的應用程式。 執行緒則是作業系統配置處理器時間的基本單位。 執行緒可以執行處理序的任何部分程式碼,包括目前正由另一個執行緒執行的部分在內。
監測管理事件
在程式中,我們常常會需要去檢查電腦的某些狀況,例如:目前某個服務的狀態或者磁碟空間剩餘多少等等。此外,要是這些狀態還可以自動回報,那就更好了。 沒錯,WMI 就是這樣一個好物。
Windows管理規範 (Windows Management Instrumentation, WMI) 是 Windows 作業系統的服務元件, 它提供系統管理員方便管理應用程式與資源的工具,同時可以透過程式去存取應用程式、服務和其他電腦元件的管理資訊 (例如,組態設定和屬性值)。 底下列表為WMI的幾個主要功能:
- 1. 在遠端電腦器上啟動一個工作。
- 2. 設定一個在特定日期和時間執行的工作。
- 3. 遠端啟動電腦。
- 4. 獲得本機或遠端電腦的已安裝程序列表。
- 5. 查詢本機或遠端電腦的 Windows 事件日誌。
2012年2月8日 星期三
組態設定
組態設定
認識組態檔
系統開發時,一定會使用組態檔,來記錄一些可能會變動的資訊,以避免因 hard-code 所造成的不方便。 .NET底下的 System.Configuration 命名空間所提供的類別,就是用來管理組態設定用的,讓開發者可以更輕鬆的存取這些資訊。
組態管理
在組態檔中,通常我們將通用設定存放在 AppSettings 區段、 資料庫連線設定存放在ConnectionStrings 區段。 然後將應用程式設定存放在 userSettings 或 applicationSettings 區段。如果某個區段中的設定項目很多,那麼該區段內的資料就容易變的雜亂。 這時候就可以使用自訂區段,將設定值資料分區段存放,避免將所有設定值都儲存在同一區段底下,在管理維護上會比較明確。
.NET2.0組態工具
前言
若有一個應用程式,參考了一個類別庫(版號1.0.0.1),當這個類別庫升級至(1.0.0.2)時,怎麼辨? 過去在win32時代,我們使用regsvr32,將dll註冊到system32目錄底下達到共享的目的, 但是,那時候的機制是不支援不同版本同時運行的,也就是,當新版本被註冊後,舊版本就自動被取代了, 而參考這個類別庫的應用程式,若對這個新的版本有不支援的狀況時,就會導至錯誤發生。
建立Installer
要設計安裝程序,可以在 Visual Studion 中建立一個安裝專案,將應用程式專案打包成一個安裝檔後,再進行安裝。 另外也可以在應用程式專案中,自行加入一個安裝類別,再透過安裝工具 InstallUtil.exe ,將該組件安裝至系統。
2012年2月1日 星期三
多執行緒
簡單講,執行緒就是要讓程式有並行處理的能力,也就是希望同一時間可以執行多項作業。 對 Windows 應用程式而言,讓耗費時間的工作在幕後執行,可以讓 UI 仍能保持回應能力。 對伺服器應用程式而言,多執行緒處理可讓不同的執行緒去處理每個接收到的請求。否則,在先前的請求完全得到滿足之前,每個新的請求都不會獲得服務。
幾底幾個項目,都是.NET 中用以提供達到這樣的功能的類別物件。
- Thread :
- ThreadPool :
- BackgroundWorker :
- Task :
- Parallel :
不管使用以上哪一種方式,只要是並行作業的處理,你都必須將所要執行的程式碼用一個函式包起來,而且這個函式必須是無回傳值的函式。 而所謂的非同步作業模型,指的就是在另一個執行緒中去執行該函式,這樣主程式就可以繼續下一行程式,不用一直等到函式結束。 若主程序有參數要傳遞給它,也只能使用一個 Object 型別的參數。 例如:。
void DoWork() { //ToDo.. } void DoWork_Para(Object state) { //ToDo.. }
資料同步問題
同步處理機制是設計 Multi-Thread 時必須特別注意的工作,主要的目的是要限制,當兩個或多個執行緒需要同時存取同一個共用資源時,一次只能有一個執行緒可以使用該資源。 為了避免其他執行緒同時存取,該資源將被獨佔鎖定,這樣的機制就稱為「同步處理機制」。 針對單一簡單的變數運算或者區塊的程式,.NET提供了多種不同的機制以達到同步鎖定( Synchronization Locks )的目的。