目前分類:.Net 技術 (135)

瀏覽方式: 標題列表 簡短摘要

Dictionary 是 .NET 上很常用到的類別,但它有個缺點,就是索引值不存在卻用該索引值去取值,就會發生 Exception 。所以在使用上,都會呼叫 ContainsKey 確認索引值是否存在,但也造成了一些不便。假如在索引值的型別上,確定是使用字串,那 HybridDictionary 會是一個不錯的選擇。

在 MSDN 上有一段敘述:

它利用具有小集合的 ListDictionary 之增強效能,並提供彈性來切換至處理較大集合較 ListDictionary 更好的 Hashtable

除了這個優點,個人認為比起 Dictionary 要額外判斷索引值的存在, HybridDictionary 在這方面做得比較好,以下是程式碼範例。

            HybridDictionary dic = new HybridDictionary();
            string strKey1 = "Key1";
            string strKey2 = "Key2";
            Console.WriteLine(string.Format("使用不存在的Key:{0}", dic[strKey1]));
            dic[strKey2] = "value1";
            Console.WriteLine(string.Format("使用已存在的Key:{0}", dic[strKey2]));

 

執行結果

2012-06-14_222017

 

參考資料

HybridDictionary 類別

卑微研究生 發表在 痞客邦 留言(0) 人氣()

Metro App 既然是行動裝置上的程式,當然一定要跟網路結合。現在很多所謂的 Web Service 都是走 http 協定。而在Metro App裡,可以使用HttpClient 來呼叫 Web Service 。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

有時候測試 Web Service 或是為了對特定網站做些邪惡的事,通常會使用.NET上的WebRequest 來撰寫測試程式,本篇文章將會介紹如何利用 WebRequest 類別來對網站做 Get 以及 POST 動作。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

一般在做大型網站,通常會寫一支程式,固定一段時間就跑一些工作,例如說上架商品或是寄電子郵件之類的。一般而言有些工程師會採取下列作法。

            string strArgs = "Task1";

            switch(strArgs)
            {
                case "Task1":
                    Task1();
                    break;
                case "Task2":
                    Task2();
                    break;
                case "Task3":
                    Task3();
                    break;
            }

這種作法就是根據參數值而決定要跑哪一個函式,這樣的好處在於程式很好寫,但缺點就是當工作的種類一多,switch case就會愈寫愈長,然後程式碼就愈來愈噁心。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

當程式遇到Exception時,雖然從Exception物件可以取得堆疊資訊,但由於是字串屬性,所以會一次取得一大串的資訊,對於記錄上有點不方便。幸好.NET提供StackFrame類別,讓程式可以很彈性的處理Exception資訊。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

最近在研究短網址的實作方法,在Google上找到一篇對岸的文章:

Short URL (短网址) 算法C#实现

而這篇所參考的方法則是下列國外的文章:

Implement your own short URL

有興趣的朋友可以閱讀上面兩篇文章,本篇文章算是前面兩篇的筆記。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

ViewState大概ASP.NET裡最偉大的發明,因為它提供與WinForm一致的開發經驗,讓寫單機AP的開發人員也能無痛(?)轉移到Web上的開發。一般的ASP.NET網頁,在原始碼中會有如下圖的hidden value。

2012-03-02_142924

其實ViewState是以Base64編碼,還原後可以看見部份文字,實際上它是將物件序列化後再轉為Base64字串,接下來示範如何將ViewState還原。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

網頁在登入後,通常都會寫入一組Cookie,好讓網站之後可以驗證是否已登入過,但Cookie尤於是寫在本機端,在對網站發出Http Request時一併將Cookie傳送過去,如果傳送中途被第三方截走,就會有身份被盜用的風險。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

最近在看Ultra-Fast ASP.NET的Kindle版本,裡面提到IIS及ASP.NET會輸出額外的Http Header,這些額外的Header某方面來說算是提供駭客有用的資訊,所以能移除就移除掉,本篇文章將會講解書中提供的方法。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

CKEditor是一個好用的HTML編輯器,支援許多平台,它也有ASP.NET的版本,使用上相當容易,因為它是包裝成一個控制項,只要拖進頁面就能使用。

卑微研究生 發表在 痞客邦 留言(2) 人氣()

如果你的搜尋引擎有特定的用途,例如用在圖書館、電子商務網站等,勢必會針對某些欄位做搜尋,例如會對商品的價格做限制,或是限定在某個上架日期。這些欄位都不是以純文字儲存,而是特定的資料型態,以商品價格來說,它是以整數來儲存。那麼,在搜尋引擎索引時,就必須特別處理。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

一般的ASP.NET網頁,當使用者送出一個Request,後端就會跑整個ASP.NET程式,然後讀資料庫有的沒的,最後再輸出成網頁。

某些情況下,資料並不會一直更動,重覆跑後端的邏輯及讀取資料庫,對效能、能源也是種浪費,這時候就會使用快取的方式,來減低伺服器的負擔。但在下認為,直接輸出HTML而不跑後端程式是最完美的作法,當然這是不太可能的,至少在MVC的架構下,還是得跑一個Controller邏輯。但無論如何,後端程式輸出HTML到檔案,後續就直接讀取該檔案這樣的作法,個人覺得還是值得研究的。

卑微研究生 發表在 痞客邦 留言(2) 人氣()

NoSQL這玩意兒最近算蠻流行的,而且噗浪也有在用,許多大型的網站其實也有漸漸在用NoSQL相關的技術,關於這方面的資訊,可以參考iThome的報導:

NoSQL解決資料庫暴量的新方法

NoSQL相關的選擇其實很多,本篇文章將會針對mongoDB做介紹。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

在傳統的WinForm中,如果程式要顯示訊息視窗,方法是呼叫MessageBox的Show函式。而在Metro App裡,是使用所謂的Toast Notification,也就是即時訊息。它的使用方法比較特別,是用利XML設定要顯示的訊息。底下示範使用方法。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

Metro App跟一般Windows程式,在檔案的存取權限上有很大的不同。以往在寫WinForm時,是不用考慮權限問題,讀取檔案不會有什麼阻礙。但Metro App的限制很多,一般的檔案幾乎沒辦法讀取,只有少部份資料夾可以。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

在上一篇文章中,有簡單介紹Lucene.Net的用法,不過一般的情況,資料是會一直新增的,所以程式也必須有索引管理的功能,本篇文章將會簡介刪除、新增索引的方法。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

前一篇提到了如何用C++寫元件給Metro App用,本篇將介紹用C#寫元件的方法。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

對於一個網站來說,當內容一多的時候,弄個搜尋引擎也是合理的。只是一般來說,這東西的門檻算高,對於沒接觸過理論的人來說,要自行開發搜尋引擎較為困難。某些網站的作法,都是將查詢的關鍵字放進SQL語法直接查詢,通常都是用select * from table where field like ‘%SearchQuery%’ 。但是,這類的查詢語法是很吃資料庫效能的,一旦使用者一多,是會拖垮網站的速度。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

前陣子微軟釋出了Windows 8的preview版,而且還附加Visual Studio 11的Express測試版。而且目前最引人注意的,就是Windows 8裡的Metro App,除了可以用傳統的VB、C#、C++開發,還能用JavaScript與Html5撰寫應用程式。

卑微研究生 發表在 痞客邦 留言(0) 人氣()

由於工作用的測試機是架在另一台實體機器的VM裡,每次更新裡面的網站都得透過遠端連線登入後,才能更新,而且遠端連線的速度又不是很快。所以才尋找有無辦法解決這種無效率的更新方式。

卑微研究生 發表在 痞客邦 留言(1) 人氣()