为什么从配置文件中读取的参数严重拖慢程序速度?

zscdzh 2016-07-20 04:47:43
有个计算程序需要从配置文件中读取参数,问题是不从配置文件读取的时候计算需要20s,一旦从配置文件中读取参数就变成了60+,我简直不能理解

FILE *f;
char buf[255];

f=fopen("config.txt","r+");
if (NULL!=f)
{
while (1) {
if (NULL==fgets(buf,255,f)) break;
if (1==sscanf(buf,"x1=%f",&x1)) break;
}
}
fclose(f);

这是我从这个论坛里找到的读取配置文件的代码,但是换一种方式读取参数同样会严重拖慢计算速度,为什么啊?
谢谢!
...全文
431 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-07-25
  • 打赏
  • 举报
回复
推荐楼主使用软件filemon
赵4老师 2016-07-21
  • 打赏
  • 举报
回复
关闭杀毒软件的实时防护功能。
lm_whales 2016-07-21
  • 打赏
  • 举报
回复
引用 11 楼 zscdzh 的回复:
[quote=引用 10 楼 lm_whales 的回复:] 编码错误, if (1==sscanf(buf,"x1=%f",&x1)) break; 读到一个正确的数据,你就退出了 这个代码,不打算正常工作啊,这是 是不是手误啊 改成 if (1!=sscanf(buf,"x1=%f",&x1)) break; 世事
哦,这个是我debug的时候弄的,因为我发现只要从配置文件中读一个参数,程序就慢三倍了,效果立竿见影...所以其他参数都是写在代码里面的,目前只读一个参数debug[/quote] 参数这么少,直接一次读出。 需要的时候,写到文件里。 如果,参数多了,直接开数据库 这种读法,效率不会高 但是60秒这个真不知道咋回事 写文件,读文件不会这么慢的
paschen 2016-07-21
  • 打赏
  • 举报
回复
引用 4 楼 u011609112 的回复:
[quote=引用 3 楼 paschen 的回复:] 先用性能工具分析下代码,看下执行哪些语句耗时多,然后再下结论和找原因
推荐一下一般的性能工具,还没用过,简单实用的[/quote] VS就自带有,百度搜一下怎么用
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
引用 10 楼 lm_whales 的回复:
编码错误, if (1==sscanf(buf,"x1=%f",&x1)) break; 读到一个正确的数据,你就退出了 这个代码,不打算正常工作啊,这是 是不是手误啊 改成 if (1!=sscanf(buf,"x1=%f",&x1)) break; 世事
哦,这个是我debug的时候弄的,因为我发现只要从配置文件中读一个参数,程序就慢三倍了,效果立竿见影...所以其他参数都是写在代码里面的,目前只读一个参数debug
lm_whales 2016-07-21
  • 打赏
  • 举报
回复
编码错误, if (1==sscanf(buf,"x1=%f",&x1)) break; 读到一个正确的数据,你就退出了 这个代码,不打算正常工作啊,这是 是不是手误啊 改成 if (1!=sscanf(buf,"x1=%f",&x1)) break; 世事
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
引用 8 楼 lm_whales 的回复:
这样啊,文件读取应该比手动输入快得多才对 同样输出到文件,比输出到屏幕要快得多 你这不是读写文件的问题 一个较大的可能是,存储文件的磁道有问题 正常读写文件。不会消耗多少时间的 秒级读写,已经是很慢很慢的了 几十个参数的话,是毫秒级的,甚至更快 不清楚你这是什么情况 不会是电脑中了病毒了吧
应该不是吧,中病毒应该没这效果...其他计算程序都是没问题的 所以我才纳闷啊,我把从参数文件里面读取的值在后面又赋值一遍,速度还是慢,这样看起来是读取参数语句的问题,但是我把读取参数的语句保存,读取一个在后面用不上的参数,速度又正常了! 我真是....
lm_whales 2016-07-21
  • 打赏
  • 举报
回复
这样啊,文件读取应该比手动输入快得多才对 同样输出到文件,比输出到屏幕要快得多 你这不是读写文件的问题 一个较大的可能是,存储文件的磁道有问题 正常读写文件。不会消耗多少时间的 秒级读写,已经是很慢很慢的了 几十个参数的话,是毫秒级的,甚至更快 不清楚你这是什么情况 不会是电脑中了病毒了吧
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
引用 6 楼 lm_whales 的回复:
小文件,直接全部读到内存,就可以了 大文件,要么分段处理,要么采用别的工具处理(数据库,注册表,.ini ) 这么读来读去的不是个事情。
谢谢! 参数文件不大,就十几个参数,问题在于我读取参数后,程序主循环变慢了好多,当然读取参数不在主循环里面,所以我很难理解,从键盘中scanf得到的参数不会对计算速度造成任何影响,一旦从配置文件中读取哪怕一个参数,就会导致程序慢三倍...
lm_whales 2016-07-21
  • 打赏
  • 举报
回复
小文件,直接全部读到内存,就可以了 大文件,要么分段处理,要么采用别的工具处理(数据库,注册表,.ini ) 这么读来读去的不是个事情。
lm_whales 2016-07-21
  • 打赏
  • 举报
回复
可以Windows 用API函数读取配置文件 当然手工读取也是可以的 关键问题是,查找比较耗时吧(文件中查找,要反复来回读取,这太折腾了) 读取不费什么时间 也许可以用内存映射文件方式读写
OnePeace888 2016-07-21
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
先用性能工具分析下代码,看下执行哪些语句耗时多,然后再下结论和找原因
推荐一下一般的性能工具,还没用过,简单实用的
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
多谢各位! 问题差不多解决了,导致速度慢的情况只会出现在x1和dx这两个参数上,这两个参数是我用来划分计算网格的,虽然还不知道为什么会这样,但是对我的程序已经影响不大了,有空再仔细分析一下,谢谢各位!
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
感觉从文件里读出来的参数有毒...... 我新建了一个变量,从txt中读出,然后把它赋值给真正用上的变量,结果还是变慢了....
zscdzh 2016-07-21
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
关闭杀毒软件的实时防护功能。
试了一下,关掉了windows defends实时防护,还是那样 而且这也解释不了为什么我读一个用不上的数据,可以读而且对速度没有影响,一旦我读入一个参数,哪怕后面对参数在程序内再次赋值,也会造成程序变慢 这个程序变慢应该是每一步计算都变慢了,因为我有实时计算结果的二维显示图像 感觉像是这个读取让我的参数结构变化了,精度扩大了好多位,然后计算就慢了,但是这个读取的不是float么...
paschen 2016-07-20
  • 打赏
  • 举报
回复
先用性能工具分析下代码,看下执行哪些语句耗时多,然后再下结论和找原因
zscdzh 2016-07-20
  • 打赏
  • 举报
回复
我需要的是从文件中读取参数啊,从配置文件中读取每一个需要的参数,你这个是打印吧? 无论如何,多谢回复!
张小飞Official 2016-07-20
  • 打赏
  • 举报
回复
要不试试我的? http://blog.csdn.net/u010370871/article/details/50508859

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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