2012年2月15日 星期三

Event Log

要記錄log,可以用各種方法,EventLog 只是 Windows 本身提供的一種機制,可以用來記錄應用程式的狀況。

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 中用以提供達到這樣的功能的類別物件。

不管使用以上哪一種方式,只要是並行作業的處理,你都必須將所要執行的程式碼用一個函式包起來,而且這個函式必須是無回傳值的函式。 而所謂的非同步作業模型,指的就是在另一個執行緒中去執行該函式,這樣主程式就可以繼續下一行程式,不用一直等到函式結束。 若主程序有參數要傳遞給它,也只能使用一個 Object 型別的參數。 例如:。

void DoWork()
{
    //ToDo..
}

void DoWork_Para(Object state)
{
    //ToDo..
}

資料同步問題

同步處理機制是設計 Multi-Thread 時必須特別注意的工作,主要的目的是要限制,當兩個或多個執行緒需要同時存取同一個共用資源時,一次只能有一個執行緒可以使用該資源。 為了避免其他執行緒同時存取,該資源將被獨佔鎖定,這樣的機制就稱為「同步處理機制」。 針對單一簡單的變數運算或者區塊的程式,.NET提供了多種不同的機制以達到同步鎖定( Synchronization Locks )的目的。

非同步程式設計

非同步作業通常是用來執行可能需要很長時間才會完成的工作,例如,開啟大型檔案、連接到遠端電腦或查詢資料庫。 要設計非同步作業,除了自行利用 Thread 物件增加執行管道外,在 .NET 中已提供幾種設計模式來快速達到非同步作業的目的。