2007年3月13日

電腦每月電費計算方式

轉自http://cha.homeip.net/blog/archives/2004/11/eeeeec_1.html

電腦每月電費試算公式:

瓦特(W) x 運轉率(%) x 一天開機時數(hr) x 30(day) / 1000 x 3(每度電) = NT$

其中, 瓦特(W) 就是指電腦的電源供應器 (Power Supply) 的耗電量, 一般常見的有 250W, 300W, 350W; 若是 Notebook 則要看 Notebook 底部的標示, 或以 瓦特(W) = 伏特(V) x 安培(A) 這個公式來換算. 從 Notebook 的變壓器的標示上找出 Output(輸出) 的資料, 如: 19V 2.64A, 將此二數字相乘即可得到 50.16, 這個數字就是這台 Notebook 的耗電量(瓦特).

至於運轉率, 這個就比較抽象啦! 憑感覺給個假設值就可以了. (如: 70%)
週邊設備越多 (如: 風扇、硬碟) 以及開機時間內電腦的使用率越高 (如: 螢幕一直開著、硬碟存取的次數很多) 運轉率的值就應該設定得高一些.

以上述 Notebook 的資料來試算:
假設運轉率 70%, 每天開機 24 小時, 一個月的電費為:
50.16 * 70% * 24 * 30 / 1000 * 3 = NT$75.84

ps: 把上面的算式貼到 Google 的查詢列中, Google 會貼心地幫你計算結果喔! ^^

2007年3月12日

.NET 語言中可提升效能的邏輯運算子

此文轉自http://j2se.myweb.hinet.net/

VB.NET 從 1.0 版時即導入了兩個新的運算子 AndAlso、OrElse,可實作「最短路徑 (Short-circuiting)」以提升程式效能 (在 C# 中為 &&、|| 運算子)。亦即當第一個評量運算式已可判定最終運算結果時,就不需再去評量後續的運算作業。若所略過的是迴圈、較複雜或內含程序呼叫的運算式時,對效能提升的幅度會更為明顯。以下為範例說明:
Dim A As Integer = 20
Dim B As Integer = 10
Dim C As Integer = 5
Dim bln As Boolean
bln = A > B AndAlso B > C   ' 結果為True,第二個運算式會被評量
bln = B > A AndAlso B > C   ' 結果為False,第二個運算式不會被評量
bln = A > B AndAlso C > B   ' 結果為False,第二個運算式會被評量
bln = A > B OrElse B > C   ' 結果為True,第二個運算式不會被評量
bln = B > A OrElse B > C   ' 結果為True,第二個運算式會被評量
bln = B > A OrElse C > B   ' 結果為False,第二個運算式會被評量

由上例可知,在大多數情況下我們應該分別使用 AndAlso、OrElse 來取代 And、Or 運算子。此外 VB 2005 新增了新版 Java 和 C# 都支援的 Generic Type (泛型),除了能讓執行時期的轉型錯誤變成編譯時期錯誤、增進型別安全之外,因可減少 Value Type 和 Object 型別的 Boxing / Unboxing 轉型機會,在某種程度上亦可提升程式效能。

ADO.NET 2.0 的並行控制與資料存取衝突偵測

此文轉自http://j2se.myweb.hinet.net/

日前台灣高鐵及其系統包商所開發的訂票系統,曾出現大量重複訂位之情形,產生了車次、時段與路程都一模一樣的重複序號。類似此種訂票系統除了可使用 Web-based 架構外,若考量到斷線的處理作業,是否能在斷線的情況下還能夠交易,那麼還可考慮 client-server 的架構,如此一來就要設計各個 client side 可以配給的車號、數量,以及恢復斷線後再同步的機制,才能夠即時處理並儘可能避免重複劃位的現象。

若要避免產生重複劃位,較簡單的做法是採用 Transaction (ADO.NET) 寫法。讓某位訂票者在交易座位 1A 時,其他人都無法讀取此 1A 座位,一直到他的交易結束為止,亦可搭配使用 dirty read 去強行讀取;類似資料庫的「獨占鎖定 (exclusive lock)」,讓某人修改資料時其他人連讀取都不行 (亦會限制同時線上數量)。此種「獨占鎖定」類似 ADO.NET 的「封閉式 (悲觀) 並行存取」機制,雖然會長時間從資料被讀取開始即將其鎖定,但至少可保證交易一定有效。像這種資料 lock 的機制只要撰寫 Transaction 程式,或是調整資料庫的鎖定策略、鎖定提示就可做到。此外還可搭配使用資料庫的 TimeStamp 計數器,判斷資料列中的任何值是否有任何改變。另外 SQL Server 2005 還有更優越的 Snapshot Isolation 快照隔離模式,其提供一種新的隔離層級,可將寫入程序、讀取程序作適當地隔離,使得讀取動作不等待寫入動作、寫入動作不干擾讀取動作,以提高資料的可用性、加快交易的執行速度。

至於 ASP.NET 2.0 / Visual Studio 2005 亦提供了入門級的解決方案,可由 SqlDataSource 等資料存取控制項的圖形設定介面中,勾選「進階」按鈕內的「使用開放式並行存取」選項,即可啟動衝突偵測機制 (ConflictDetection 屬性)。此舉會將控制項預設的「OverwriteChanges」改為「CompareAllValues」,並判斷資料從剛才第一次讀取到更新的這段期間內,是否曾被其他程序變更過,此一選項亦即 ADO.NET 的「開放式 (樂觀) 並行存取」機制,只有當資料正在修改時才會進行鎖定,並在修改完後再對各個欄位的新舊資料進行比對,看是否曾在這段期間內搶先被其他使用者修改了同一筆記錄;但其他所有使用者仍可在此時去讀取,類似於資料庫的「共用鎖定 (shared lock)」。若未勾選「使用開放式並行存取」此一選項時,即會採用預設的「後進先寫入」機制,這種做法也是只在修改時才會鎖定,但不會將更新後的資料與原始資料作比對,因此有可能發生欲修改的資料被其他使用者覆寫掉之情形。