我也分享一个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 ...
随机推荐
- Codeforces 713A. Sonya and Queries
题目链接:http://codeforces.com/problemset/problem/713/A 题意: Sonya 有一个可放置重复元素的集合 multiset, 初始状态为空, 现给予三种类 ...
- vue中keep-alive
vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 1.基本用法,缓存整个页面或组件 <keep-alive> <component&g ...
- zabbix报警-邮件-钉钉
安装zabbix的时候已经配置了zabbix_server的脚本目录 AlertScriptsPath=/opt/app/zabbix/script 所以把邮件.钉钉.微信相关的脚本都放在/opt/z ...
- 【剑指offer】9、斐波拉契数列
面试题9.斐波拉契数列 题目: 输入整数n,求斐波拉契数列第n个数. 思路: 一.递归式算法: 利用f(n) = f(n-1) + f(n-2)的特性来进行递归,代码如下: 代码: long long ...
- Visual Studio警告IDE0006的解决办法
Visual Studio警告IDE0006的解决办法 Visual Studio警告IDE0006虽然给出明确的操作过程,但是在实施的过程中,还是有很多地方需要注意.下面以官方的信息,介绍一下注意 ...
- 【差分约束系统】【强连通分量缩点】【拓扑排序】【DAG最短路】CDOJ1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
题意: 给定n个点(点权未知)和m条信息:u的权值>=v的权值+w 求点权的极小解和极大解(无解则输出-1) 极小解即每个点的点权可能的最小值 极大解即每个点的点权可能的最大值 题解: 差分约束 ...
- Java学习笔记(16)
需求:使用LinkedList存储一副扑克牌,然后实现洗牌功能 package cn.itcast.list; import java.util.LinkedList; import java.uti ...
- Java常用小笔记
1.对list集合进行分页 //startIndex指的是开始的小标 从0开始,pageSize是每页记录数 int toIndex = new Integer(startIndex)+new Int ...
- Codeforces Round #345 (Div. 2) E. Table Compression 并查集
E. Table Compression 题目连接: http://www.codeforces.com/contest/651/problem/E Description Little Petya ...
- BZOJ 4032: [HEOI2015]最短不公共子串 后缀自动机 暴力
4032: [HEOI2015]最短不公共子串 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4032 Description 在虐各种最 ...