我也分享一个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 ...
随机推荐
- UVa 10562 Undraw the Trees 看图写树
转载请注明: 仰望高端玩家的小清新 http://www.cnblogs.com/luruiyuan/ 题目大意: 题目传送门:UVa 10562Undraw the Trees 给定字符拼成的树,将 ...
- 【Bzoj4555】【Luogu P4091】求和(NTT)
题面 Bzoj Luogu 题解 先来颓柿子 $$ \sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj! \\ =\sum_{j=0}^n2^jj!\sum_{i=0}^nS(i,j ...
- Sqli-labs less 8
Less-8 经过简单的测试,我们发现 'or 1=1--+返回正常,那么我们就基本知道应该怎么使用了,参考less5.这里简单的进行一个示例: http://127.0.0.1/sqllib/Les ...
- c++风格
http://web.archive.org/web/20160430022340/http://google.github.io/styleguide/cppguide.html 主要注意几点: 函 ...
- 20162327实验一Java开发环境的熟悉实验报告
20162327 <程序设计与数据结构>第一次实验报告 基础知识 1.JDB的使用 使用JDB调试程序需要以下五个步骤: 1.设置断点 stop in 2.run 3.print 4.ne ...
- python基础之类与对象,继承与派生
类与对象 对象的本质也就是一个名称空间而已,用于存放自己独有的属性,而类中存放的是对象共有的属性. __init__会在调用类时自动触发 调用类时发生两件事: 1.创建一个空对象stu1 2.自动触发 ...
- [NOIp2017提高组]列队
[NOIp2017提高组]列队 题目大意 一个\(n\times m(n,m\le3\times10^5)\)的方阵,每个格子里的人都有一个编号.初始时第\(i\)行第\(j\)列的编号为\((i-1 ...
- “过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码
之前已经分析过了Spring的IOC(<零基础带你看Spring源码--IOC控制反转>)与AOP(<从源码入手,一文带你读懂Spring AOP面向切面编程>)的源码,本次就 ...
- HDU 5636 Shortest Path 暴力
Shortest Path 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5636 Description There is a path graph ...
- LNMP一键包屏蔽PHP报错信息开启方法
在 php-fpm.conf中的[www]下添加php_flag[display_errors] = On 重启php-fpm即可 /etc/init.d/php-fpm restart