2009年9月22日 星期二

使用工具編輯應用程式組態檔(M08)

使用工具編輯應用程式組態檔
Web專案

  • WebSite->ASP.NET Configuration
  • 連線字串、應用程式組態、安全性…
Windows專案
  • Solution Explorer選取My Project按滑鼠右鍵選取Open
  • 連線字串
  • 應用程式組態
Window應用程式組態項目分成二個存取範圍
  • Application:指應用程式所有的使用者共享的組態資訊,像是連線字串,應用程式專屬的環境變數。
  • User:指應用程式登入使用者的個別組態資訊,每個使用者都可以有自己的組態設定值,並且存在系統的使用者設定檔中「C:\Document and Settings\[使用者]\Local Settings\Application Data\[公司名稱]\[組件].exe_Url_[GUID]\版本\user.config
=====================================================
如何存取Application/User範圍的組態項目
  • Visual Basic使用My的Settings類別
Visual Basic TextBox1.Text=My.Settings.CompanyName

  • C#使用專案根命名空間的Properties.Settings
C# TextBox1.Text=WinConfig.Properties.Settings.Default.CompanyName;

存取Application範圍的組態項目
Application範圍的組態項目:只能讀取。
User範圍的組態項目:允許讀寫的項目。

程式實例

Imports System.Configuration
'寫入
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
My.Settings.ForeColor = Color.FromName(TextBox2.Text)
My.Settings.BackColor = Color.FromName(TextBox3.Text)
End Sub
'讀取
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
TextBox1.Text = My.Settings.CompanyName
TextBox2.Text = My.Settings.ForeColor.Name
TextBox3.Text = My.Settings.BackColor.Name
End Sub

2009年9月21日 星期一

Shared Assembly VS Private Assembly(M08)

私有組件與共享組件
共享組件(Shared Assembly)
1、要有StrongName,Version
2、載入檢查SimpleName, StrongName,Version
3、可放在任何位置除了CAS(Global Assembly Cache在「系統磁碟:\WINDOWS\assembly」位置下)以外的位置要寫設定檔

共享組件設計步驟:
共享組件必須有強式名稱(Strong-Name),強式名稱組件的設定如下:
1、Solution Explorer上選取My Project按滑鼠右鍵選取「Open」
2、在專案屬性頁上選取(左邊)「Signing」(簽署),並勾選「Sign the assembly」(簽署組件)

3、在「Choose a strong name key file:」下拉選項選,接著會出現「Create Strong Name Key」視窗,在此視窗的「Key file name:」輸入強式名稱金鑰的檔名,並清除「Protect my key file with a password」。

================================================
私用組件(Private Assembly)
1、載入時只檢查SimpleName
2、必須放在應用程式所在的目錄或子目錄下
3、若放Application所在的子目錄必須寫設定檔
=>.NET預設是私有組件(Private Assembly),必須與應用程式放在同一個目錄下。
=============================================================
開發階段用來取代GAC組件
  • 避免開發週期不斷的將組件重新置放到GAC
步驟
  • 設定環境變數DEVPATH
  • 組態檔指定developmentMode

如何新增環境變數
1、在「我的電腦」上按滑鼠右鍵選取「內容」,點選「進階」頁籤,按「環境變數」按鈕。
2、在「環境變數」視窗上選取「新增」。
假設您正在建置 (Build) 稱為 SharedAssembly 的共用組件,而輸出目錄為 D:\SharedAssembly\Debug。您可以將 D:\SharedAssembly\Debug 放在 DEVPATH 變數中。
3、您必須接著在電腦組態檔中指定項目。這個項目會告訴 Common Language Runtime 要使用 DEVPATH 來找出組件。

developerInstallation:指定執行階段是否在 DEVPATH 環境變數所指定的目錄中搜尋組件。true:在 DEVPATH 環境變數所指定的目錄中搜尋組件。


精力管理

<精力管理>
必須在消耗精力和恢復精力取得平衡,學習超越極限,像頂尖運動員一樣自我訓練。
一、充份投入:靠關連的精力相互運用
(1)身體精力:動作提示、運動
(2)情緒精力:喜、怒、哀、樂
(3)心理精力:邏輯思考、忍耐力、穩定度
(4)精神精力:痛苦指數,超越極限
二、不要過與不及:使用太多或太少精力會使我們身體的能量降低。
(1)消耗精力與恢復精力取得Balance
三、超越正常極限:為了建立能力,我們常常強迫自己超越極限,有系統的訓練自己
四、養成固定習慣:要充份投入和維持高績效的關鍵,就是在於「把精力管理當成自己的習慣」。

這是一篇偶然得到的文章,我也不知道出處和作者是誰,只是這個如何維持身體精力平衡的概念讓我覺得蠻有趣的,超越自我界限,不要過與不及,隨時保持精力的平衡,有點類似中庸之道。

簡單而言,就是在追求某種極限之餘,也要讓身體適度的休息,讓精神保持彈性,才有力氣再去迎接接下來的挑戰。說到這就想到最近在追求提升自我的專業力和語言力,努力努力著,短期內無法達到目標,但我相信,再不斷不斷的接近,會讓我達到我要的需求…加油。

2009年9月17日 星期四

組態及安裝應用程式(M08)

認識.NET Framework2.0的組態檔
  1. XML格式的檔案
  2. 用來設定應用程式的連結字串、安全性、應用程式的環境組態及版本控制
  3. 本機層級(Machine.config,預設儲存於[安裝磁碟]:\WINDOWS\Microsoft.Net\Framework\版本\CONFIG)
  4. 應用程式層級(一般應用程式:組件名稱.exe.config,一般應用程式組態檔必須和執行檔放在相同目錄、Web應用程式:Web.config)
  5. 編修方式有文字編輯器、MMC管理工具、Visual Studio 2005提供的工具、ConfiguratonManager類別
=========================================================
.Net Framework執行階段的版本控制
  • 電腦同時有.Net1.0、.Net1.1而未寫組態檔的情況
一般應用程式或組件在什麼版本下建置,程式執行時在執行組件當時所建置的版本。

=========================================================
.NET Framework執行版本控制
  • 只支援.NET1.0版
=>.NET Framework 1.0所建置的應用程式,必須使用requiredRun指定應用程式所支援的.NET Framework版本。requiredRuntime的version:指定版本;safemode:指定程式碼是否援譣註冊機碼以決定Runtime版本,預設為false,設為true時代表不搜尋註冊機碼







  • 支援.NET1.1以後版本
=>.NET framework1.1(含)以後建置的應用程式,必須使用supportedRuntime指定應用程式所支援的Runtime版本。






===========================
NET1.0=>V.S.2002
NET1.1=>V.S.2003
NET2.0=>V.S.2005
NET3.5=>V.S.2008(2.0、3.0、3.5)
===========================
=>.NET Framework2.0版所建置的應用程鋨只能在有.NET Framework2.0的環境執行,原因是大量引進新的類別與指令,舊版Runtime不支援。
=>.NET Framework1.0版所建置的應用程式通常可以在.NET Framework 1.0、1.1、2.0的環境上執行。.NET Framework1.1通常也可以在.NET Framework1.1、2.0上執行。但必須實際上測試才知道。

使用SortedList集合(M03)

使用SortedList集合
  • 可使用數值索引(Index)和Key值存取集合中的項目
  • 類似HashTable與Array的組合體
  • 內部維護兩個陣列(以key排序的陣列和以Value排序的陣列)
  • 根據Key值進行排序
使用SortedList物件的考量
SortedList是Key/value配對所成的集合,以key值排序,可以利用key或索引存取其中的項目。當新增時,會適當進行排序,因此建立SortedList成本是相當昂貴的。
適用SortedList情境
  • 當資料變動性不大時,新增、刪除集合項目不頻繁,或資料量不大時。
  • 要快速利用索引值,或key值讀取集合中的項目時。
  • 需要排序的項目,或查詢特定物件時。
避免使用SortedList情境
  • 集合中的項目大量變動時,因為新增項目之後需排序,需花費很久時間。若變動性大,不如改成ArrayList,它也提供排序功能,但花費的時間比SortedList少。
  • 不要使用SortedList排序字串,會額外花費轉型的負擔,若有需要排序字串,可以改用StringCollection集合。
==================================================
使用StringCollection集合
  • 定義在System.Collections.Specialized命名空間
  • StringCollection集合
=>位於System.Collections.Specialized命名空間之下
=>許多字串所成的集合
  • StringDictionary集合
=>內部實作一個HashTable
=>每個項目是一個DictionaryEntry物件

2009年9月16日 星期三

HashTable VS HybridDictionary(M03)

使用HashTable
  • Key/Value成對出現的資料結構。
  • 項目存放的順序,和加入的先後次序無關,內部項目排列順序是根據HashCode排序。
  • 索引鍵可以是文字或數值。
=>因為Hashtable中項目沒有按新增的順序排列,因此新增、行除項目的方法只能使用Add、Remove方法。Clear可以清除所有項目

程式實作
Module Module1

Sub Main()
Dim ht As Hashtable = New Hashtable
ht("10") = "Mary"
ht("20") = System.DateTime.Now
ht("30") = 100

For Each o As DictionaryEntry In ht
Console.WriteLine("Key:{0}-->Value:{1}", o.Key.ToString, o.Value.ToString)
Next
ht.Remove("10")

End Sub

End Module

使用Hashtable的考量
  • 適用在變動程度高,以及不易變動資料上。當然由於Hashtable根據Hash Code排序,資料變動的程度高代表要額外花費計算hash值的成本。
  • 如果集合中項目少於10個,使用ListDictionary來存放Key/Value配對所成的集合,可得較佳的效能。
=====================================================
使用HybridDictionary
  • 位於System.Collections.Specialized命名空間之下
  • 集合中的項目需要Key/Value配對出現
  • 內部用來儲存資料的物件(項目少:使用ListDictionary;項目多:使用HashTable)
  • 適合在無法預期集合中的資料量時
  • 不適用在排序

使用Stack VS Queue(M03)

使用堆疊(Stack)

1、循序存取集合中的項目
2、後進先出(LIFO)類型的資料架構
3、常用方法
  • Push:新增一個項目到頂端。
  • Pop:從Stack頂端取出一個項目。
  • Peek:允許檢視堆疊頂端上的項目,但不將之移除。若在空的堆疊上呼叫Peek,會觸發InvalidOperationException
程式實作
Module Module1

Sub Main()
Dim st As New Stack
st.Push(1)
st.Push(2)

Dim nIndex As Integer = 0

For Each o As Object In st
Console.WriteLine("移除前Queue->{0}:" + ControlChars.Tab + "{1}", nIndex, o.ToString)
nIndex = nIndex + 1
Next o
st.Pop()

nIndex = 0

For Each o As Object In st
Console.WriteLine("移除後Queue->{0}:" + ControlChars.Tab + "{1}", nIndex, o.ToString)
nIndex = nIndex + 1
Next o
st.Clear()

End Sub

End Module

使用Stack考量
  • 需以後進先出時。
  • 使用完資料之後就可以丟棄此資料項目時。
  • 建立時最好設定初始的容量(Capacity),避免無意義的浪費記憶體。
=====================================================
使用佇列(Queue)
1、先進先出(FIFO)類型的資料結構
2、常見方法
  • Enqueqe:新增一個項目到Queue的後面。
  • Dequeue:從Queue中移除一個項目,並回傳目前被移除的這個項目。若從空的佇列中移除一個項目會觸發InvalidOperationException例外。
  • Clear:清除所有項目。
  • Peek:查詢第一個項目,不移除此項目。若從空的佇列中呼叫Peek方法,一個項目會觸發InvalidOperationException例外。
3、常見屬性
  • Count:回傳此Queue有多少個項目。
程式實作
Sub Main()
Dim q As New Queue
q.Enqueue(1)
q.Enqueue(2)
q.Enqueue(3)
Dim nIndex As Integer = 0
For Each o As Object In q
Console.WriteLine("Queue->{0},{1}", nIndex, q.ToArray(nIndex).ToString)

nIndex += 1
Next
End Sub

使用Queue的考量
  • 需使用先進先出時
  • 為循序資料時