剛剛看了一篇 @雲菲菲 的關於基於正則的INI輔助類文章:http://www.cnblogs.com/yunfeifei/p/4081977.html,做者寫的不錯。還看到評論處有一個的地址:https://devlib.codeplex.com/SourceControl/latest#main/product/Codes/DevLib.Configuration/IniEntry.cs,也是基於ini的一些便捷性封裝類。後者顯然比前者場合通用性強一些,前者則是簡單易用,很方便。可是整體來講都很不錯了。本人學淺,求勿噴!~!~html
後面我想了一下,何不本身也些個ini輔助類?這樣一來便有了下文,這個ini類有如下幾個優勢:sql
1.加快訪問速度。數據庫
我確實是個喜歡從新造輪子的人,由於我空餘時間多。對於這種編程方面的基礎設施,仍是有所講究的。敲代碼能省則省。不少人可能會說ini操做實在太簡單了,不必從新造輪子。要知道,別人寫的不必定性能都很好。微軟提供的win32api中【WritePrivateProfileString,GetPrivateProfileString】這樣的函數,看起來很是方便了,可是其實很雞肋。編程
由於GetPrivateProfileString是讀取一次要訪問一下磁盤,若是想讀取不少個鍵值對,那效率簡直不忍直視!小程序
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); string path = @"D:\Users\Administrator\Documents\SenderRobot\SenderRobot.ini"; stopwatch.Start(); for (int i = 0; i < 10000; i++) { List<IniStruct> iniStructs = Ini.ReadValues(path);//這裏我特地用了批量讀取的方法 } string a = stopwatch.Elapsed.ToString();//INI類方法讀取所用的時間 stopwatch.Reset(); stopwatch.Start(); for (int i = 0; i < 10000; i++) { Util.ReadIniValue("應該模式", "sss", path); } stopwatch.Stop(); string b = stopwatch.Elapsed.ToString();//微軟的函數讀取所用的時間
本身修改而後對比一下效率看看!我是讀取一次,就把全部的鍵值對所有取出來放在內存裏了。而微軟則是要讀取不少次才能達到這個效果,因此效率可想而知!這樣在本身若是有程序要在啓動的時候加載不少參數的話,能讓磁盤多活幾年不說,讀取速度也是飛同樣的感受!
c#
2.另外我增長了對ini註釋的功能增強。不少人在ini裏直接用中文做爲鍵。這樣一來,你的程序不是自降等級,感受太山寨化了。用英文的做爲鍵,並非崇洋哦。這個INI類,既能批量讀取的同時把註釋也一併讀取了,還能在代碼裏寫入註釋到ini文件裏,這個功能恐怕微軟的api作不到吧。api
3.ini的輔助類操做簡單。這個類對全部人都沒有門檻。就那麼幾個函數。其中有能靜態static訪問的,也有要實例化以後才能操做的。靜態的方便一次性操做。實例化訪問的在是方便常常操做的。網絡
後了,我也說不出更多的優點了。你們有須要的能夠用用。函數
對於本地小批量數據的保存,目前主要有如下幾種方式:性能
1.ini
2.xml
3.本地數據庫
4.至於直接用文本的就直接忽略吧。太非主流了。
5.最近流行的protobuf
先說ini:
ini是比較古老的存儲方式了。在win2000的時代就已經很流行了。方便快捷
xml則後期新秀,比較標準化。不少場合能夠直接取代ini。可是若是是小型程序裏,ini絕對是最適合的,除了性能方面的考慮,xml格式的太過嚴格也是緣由之一。
本地數據庫一般用來保存大數據。好比經常使用的litesql等。小程序的話就算了吧。有這個寫sql語句的時間人家已經把整個都寫完 。
protobuf是谷歌貢獻給開源社區的文件傳輸格式,主要用來經過網絡收發信息。protocol的高效率和xml比起來,據稱至少要快xml 100倍。protocol是直接二進制保存,規則也較爲簡單,所以解析速度必然會比xml要快不少,並且更省流量!
其實,還有一種某大公司開發的編碼格式,也是和protobuf相似的。叫unistruct(unipacket)官方沒有對外的編碼。只是從它的產品逆向獲知的。這種格式也是很是緊湊。傳輸也很駕輕就熟。
好了很少說了,給你們傳上c#類,但願朋友們有幫助!