我也分享一个c# ini操作类
刚刚看了一篇 @云菲菲 的关于基于正则的INI辅助类文章:http://www.cnblogs.com/yunfeifei/p/4081977.html,作者写的不错。还看到评论处有一个的地址:https://devlib.codeplex.com/SourceControl/latest#main/product/Codes/DevLib.Configuration/IniEntry.cs,也是基于ini的一些便捷性封装类。后者显然比前者场合通用性强一些,前者则是简单易用,很方便。但是总体来说都很不错了。本人学浅,求勿喷!~!~
后面我想了一下,何不自己也些个ini辅助类?这样一来便有了下文,这个ini类有以下几个优点:
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 = ; i < ; i++)
{
List<IniStruct> iniStructs = Ini.ReadValues(path);//这里我特意用了批量读取的方法
}
string a = stopwatch.Elapsed.ToString();//INI类方法读取所用的时间
stopwatch.Reset();
stopwatch.Start();
for (int i = ; i < ; i++)
{
Util.ReadIniValue("应该模式", "sss", path);
}
stopwatch.Stop();
string b = stopwatch.Elapsed.ToString();//微软的函数读取所用的时间
自己修改然后对比一下效率看看!我是读取一次,就把所有的键值对全部取出来放在内存里了。而微软则是要读取很多次才能达到这个效果,所以效率可想而知!这样在自己如果有程序要在启动的时候加载很多参数的话,能让磁盘多活几年不说,读取速度也是飞一样的感觉!
2.另外我增加了对ini注释的功能加强。很多人在ini里直接用中文作为键。这样一来,你的程序不是自降等级,感觉太山寨化了。用英文的作为键,并不是崇洋哦。这个INI类,既能批量读取的同时把注释也一并读取了,还能在代码里写入注释到ini文件里,这个功能恐怕微软的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#类,希望朋友们有帮助!
附件:http://files.cnblogs.com/uu102/Ini.rar
我也分享一个c# ini操作类的更多相关文章
- C# 配置文件ini操作类
// [ DllImport ( "kernel32" ) ] //private static extern long WritePrivateProfileString ( s ...
- Android 分享一个SharedPreferences的工具类,方便保存数据
我们平常保存一些数据,都会用到SharedPreferences,他是保存在手机里面的,具体路径是data/data/你的包名/shared_prefs/保存的文件名.xml, SharedPrefe ...
- PHP封装的一个单例模式Mysql操作类
掌握满足单例模式的必要条件----三私一公. ①私有的构造方法-为了防止在类外使用new关键字实例化对象. ②私有的成员属性-为了防止在类外引入这个存放对象的属性. ③私有的克隆方法-为了防止在类外通 ...
- 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
问题的产生 在写JS的过程中,为了调试我们常常会写很多 console.log.console.info.console.group.console.warn.console.error代码来查看JS ...
- PHP原生:分享一个轻量级的缓存类=>cache.php
适用:原生PHP cache.php tips:代码最后有适用Demo哦. <?php /* * 缓存类 cache */ define("cacheRoot"," ...
- Ini操作类
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using S ...
- 分享一个C#的分页类
废话不说只有代码: using System.Linq; using System.Collections.Generic; namespace CommonLibrary { public clas ...
- 分享一个Web弹框类
using System; using System.Text; namespace Core { /// <summary> /// MessageBox 的摘要说明. /// < ...
- 分享一个MD5加密工具类
来自:http://blog.csdn.net/zranye/article/details/8234480 Es:http://blog.csdn.net/longxibendi/article/d ...
随机推荐
- hdu 2196(Computer 树形dp)
A school bought the first computer some time ago(so this computer's id is 1). During the recent year ...
- START法则
用途:在做项目总结以及阶段性报告等的时候,可以很好的帮自己对整个工作过程进行梳理和总结,很好的表现出自己分析问题的清晰性.条理性和逻辑性. 定义:STAR法则是情境(situation).任务(tas ...
- 「NOI2018」归程
「NOI2018」归程 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 >\(1\) 个节点. \(m\) 条边的无向连通图(节点的编号从 \( ...
- [xsy1232]Magic
题意:一个无向图,每个点有$a_i,b_i$,对任意点$i$你都可以花费$b_i$的费用将$a_i$变为$0$,最后你还要付出$\sum\limits_{i=1}^n\max\limits_{(i,j ...
- 【状压DP】BZOJ2734-[HNOI2012]集合选数
已经八月份了药丸,开始肝作业并且准备高考啦!! [题目大意] <集合论与图论>这门课程有一道作业题,要求同学们求出{1, 2, 3, 4, 5}的所有满足以 下条件的子集:若 x 在该子集 ...
- kosaraju算法求强连通分量
什么是强连通分量?在这之前先定义一个强连通性(strong connectivity)的概念:有向图中,如果一个顶点s到t有一条路径,t到s也有一条路径,即s与t互相可达,那么我们说s与t是强连通的. ...
- UNIX域套接字连接mysql
用户可以在配置文件中指定套接字文件的路径,如--socket=/data/mysql/mysql.sock [root@localhost ~]# mysql -uroot -p123456 -S / ...
- opensuse搜狐镜像
openSUSE-13.1-Update-sohu-mirror http://mirrors.sohu.com/opensuse/update/13.1/ openSUSE-13.1-Oss-soh ...
- NHibernate 之持久化类、拦截器 (第二篇)
一.持久化类中成员标量的要求 作为被NHibernate使用的持久化类,必须满足以下几点要求: 1.声明读写属性 在NHibernate的使用中,持久化类的成员变量必须声明对应的属性,NHiberna ...
- .net 程式進階除錯教學 - 使用WinDbg
https://caryhsu.blogspot.com/2011/11/net-windbg.html 從以前一直研究基金方面的資訊,但由於沒有多於的時間常常觀看,再加上碩士時在我 ...