C# 用什么方式保存程序配置比较高效

人遇到狮子 2020-06-28 12:18:57
最近在写一个小程序,winform里面有listview控件,首次运行时往里面添加网络主机信息,比较网络通信类型(tcp,udp)IP地址,端口号等等,我想把这些信息保存起来,以便下次启动可以马上通信。现在的问题是不知道以什么方式保存比较好,网上查的资料有用ini,xml,config方式,这几种方式有没有说谁比较高效,又有什么区别。数据量不大,几十条数据吧。还有个问题也并问了,当程序下次启动时读取配件文件,该如何区分哪条信息对应哪个远程主机,比如初始配置时有A,B,C三条主机信息,下次启动时,怎么区分A对应A主机呢。请大神提供一下解决思路,在此万分感谢!
...全文
2433 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghan226 2021-03-04
  • 打赏
  • 举报
回复
数据量大就自己创建xml文件保存,很少就直接用系统配置文件保存节点,存取方便
shawn_yang 2021-01-28
  • 打赏
  • 举报
回复
json不香吗
ljhhh7890 2021-01-24
  • 打赏
  • 举报
回复
配置信息什么的小数据还是app.config吧,vs2010自带,插入一个叫做设置文件的用户控件。连打开关闭文件都省了。
人遇到狮子 2020-06-29
  • 打赏
  • 举报
回复
引用 4 楼 Bridge_go的回复:
ini,xml格式就下面这样,很好区分ABC INI [A] A1=a1 A2=a2 [B] B1=b1 B2=b2 [C] ... XML <Param> <A> <A1>a1</A1> <A2>a2</A2> </A> <B> <B1>b1</B1> <B2>b2</B2> </B> </Param>
最后还是选择用了json方式,代码量少。但是怎么区分还没想到办法。因为在listview是动态创建主机信息,目前列1用的是guid方式获取的ID,用于区分每个对象。我卡在了怎么根据ID来判断,使用定值判断能做但是就写死了,不便于维护
圣殿骑士18 2020-06-29
  • 打赏
  • 举报
回复
最初流行ini时用ini,后来流行用xml时用xml。现在我喜欢用json config,因为序列化对象方便呀。提取时序列化参数为对象来处理,保存时,将对象序列化一次性保存。比xml搜索定位修改,或者xml序列化都方便! 不过呢,系统级别的配置,我还是用app.config,编码规范很重要。
ying1234 2020-06-29
  • 打赏
  • 举报
回复
对于一般简单的配置,不需要多台服务器共用的配置,你无须放在象redis之类的缓存中,你可以自已放在ini,xml,config中,读入到cache中,作缓存依赖,这样速度最快。因为是读的本机服务器的缓存,最多也是本机服务器上的文件。
正怒月神 2020-06-29
  • 打赏
  • 举报
回复
1 ini,xml,config 随便哪种,你用就是了。
十几条数据的别说效率性能之类的话题。
你要先解决的问题是,用户对于文件的读写权限。

2 A,B,C主机,存储后不知道对应?
你存储一个 key-value。
app.config/web.config了解吗?存储一个key-value就可以了。
wanghui0380 2020-06-29
  • 打赏
  • 举报
回复
火星探测者一号 等于 xxxxx-xxxxxxx-xxxxx-xxxx 就按你的说法,我guid标识唯一,那也不妨碍我们另外给他起一个更容易记忆的人类名字
wanghui0380 2020-06-29
  • 打赏
  • 举报
回复
引用 12 楼 人遇到狮子 的回复:
最后还是选择用了json方式,代码量少。但是怎么区分还没想到办法。因为在listview是动态创建主机信息,目前列1用的是guid方式获取的ID,用于区分每个对象。我卡在了怎么根据ID来判断,使用定值判断能做但是就写死了,不便于维护
判断什么?不判断。 参考:ip地址和域名。 我说打开“百度”-------你做的事情是打开浏览器输入“www.baidu.com”对么,而不是输入了一个地址对么 所以,你给他一个名字就好。这里其实不存在判定。 请连接“火星探测者”一号这是人类做法,请连接设备“xxxxx-xxxxxxx-xxxxx-xxxx”这是机器的做法。差别只是我们人类不喜欢记那种没意义的符号
lindexi_gd 2020-06-29
  • 打赏
  • 举报
回复
试试我的开源库

https://github.com/dotnet-campus/dotnetCampus.Configurations
wanghui0380 2020-06-28
  • 打赏
  • 举报
回复
程序员做事情不是非此即彼。 程序员做事情,既不向左,也不向右。我们站中间,依赖抽象 微软目前给你的抽象是IConfigurationBuilder接口。至于实现这个接口的Provided是谁,程序员并不关心。你要往左我们就往左,你说左边不好,俺们就去右边。
wanghui0380 2020-06-28
  • 打赏
  • 举报
回复
这个无需纠结,如果你玩net core。 在你的program.cs里就2句话 var host_bd = new HostBuilder(); host_bd.ConfigureAppConfiguration((context, ConfigurationBinder) => { ConfigurationBinder.AddJsonFile("appsettings.json"); }) 此处是要求你返回一个IConfigurationBuilder就好,也就是对于我们程序员来说,考虑问题的方式并不如同啥博客园那些伙计们那样喜欢纠结啥“XXX vs yyy”,“yyy 比xxx好”,对我们程序员来说,我们根本就不考虑这个。 他就是一个IConfigurationBuilder,至于你是提供ini的实现,提供json实现,提供yaml,提供ado.net的实现,提供redis的实现,提供xml的实现。我们其实根本就不在乎。 比如这里我用了json实现,那么又如何呢?你告诉我你想用yaml,没问题。我只需要nuget一个yaml的实现,然后在这里修改一句话就好。 so,你们还要纠结 xxx vs yyy么?
datafansbj 2020-06-28
  • 打赏
  • 举报
回复
XML 应该最高效(综合考虑)。如果不考虑扩展性、跨平台等要求,我觉得 DataTable 是不错的选择,可以直接序列化成 XML 保存,很容易反序列化回来,用于保存二维表格数据比较容易实现,且通俗易懂。ini 不建议使用(微软官话)。
by_封爱 版主 2020-06-28
  • 打赏
  • 举报
回复
几十条数据用什么还重要吗? 反正你说的那几个 都是文本方式读写....没什么区别
蜗牛慢慢趴 2020-06-28
  • 打赏
  • 举报
回复
把配置信息存放到静态类中,保存时使用类的序列化方式存储到xml,读取时反序列化到类中
IusRunkisTic 2022-11-10
  • 举报
回复
@蜗牛慢慢趴 静态类没办法序列化吧。。
qq_39080073 2020-06-28
  • 打赏
  • 举报
回复
根据电脑硬件特性,一般读写内存比硬盘快许多,但是配置信息放内存不现实,放在硬盘都一样,放在网络上又会慢些。 监控设备出售
Bridge_go 2020-06-28
  • 打赏
  • 举报
回复
ini,xml格式就下面这样,很好区分ABC INI [A] A1=a1 A2=a2 [B] B1=b1 B2=b2 [C] ... XML <Param> <A> <A1>a1</A1> <A2>a2</A2> </A> <B> <B1>b1</B1> <B2>b2</B2> </B> </Param>
牧歌ing 2020-06-28
  • 打赏
  • 举报
回复
你说的三种都可以,无非就是读文件,然后控件绑定数据,也就几秒的事情,这效率可以了
  • 打赏
  • 举报
回复
软件编程不轻言“是非”,而是以测试为准,以当时的实践事实为准。你要把配置数据保存到一个 UI 界面,前提是你先搞明白了锁配置数据表格每一行每一列代表了什么,否则也就没有必要动手去写代码。所有所有的问题以及解决都有个次序,能判断所花的精力是否必要,有没有更重要的技术需要去学习,才不会自相矛盾。
  • 打赏
  • 举报
回复
多少才算低效,你先要给出一个数量化的指标。
加载更多回复(1)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧