首页
社区
课程
招聘
关于频繁读写INI配置文件CPU过高,求帮忙!
2012-7-3 12:29 14747

关于频繁读写INI配置文件CPU过高,求帮忙!

2012-7-3 12:29
14747
我用GetPrivateProfileString 和 WritePrivateProfileString 函数在线程里频繁读写INI配置文件,但是CPU显示占用很高,有超过15%

我这个读写配置文件只是把数据显示到列表框上。

请教一下,用怎样的方式频繁读写才不会导致CPU过高呢。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (24)
雪    币: 4031
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ztenv 2012-7-3 12:55
2
0
有必要频繁读写吗?
1、控制读取的频率
2、只读取,不显示到界面,看是否有改善
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
cntrump 13 2012-7-3 13:03
3
0
用文件事件通知,文件有变化才读取。
雪    币: 5
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyports 2012-7-3 13:12
4
0
我是从游戏来读取数据保存在INI文件里做记录,然后再把这个数据显示在列表框上的,所以需要频繁读取数据
雪    币: 5
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyports 2012-7-3 13:14
5
0
因为有个别的数据需要在不开游戏的情况下也可以显示,所以才保存在INI文件上,不知道还有什么别的更好的办法来做这个事
雪    币: 558
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guijc 2012-7-3 13:53
6
0
我觉得,你在读写之前,随便Sleep上个1毫秒都不会出现你说的那个问题
雪    币: 4031
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ztenv 2012-7-3 18:04
7
0
sleep(10)吧,至少应该是10毫秒,性能瓶颈应该不是读ini文件,而是刷新界面,所以建议你读出来数据后,在内存在存一份,下次读数据后对比一下是否有变化,有变化再更新到界面,没有变化则sleep(10),继续读
雪    币: 285
活跃值: (16)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
liuyq 2012-7-3 20:24
8
0
呵呵,我觉得这是编程基本功问题,尽可能把那INI文件预存到内存中,然后写文件就专门用个线程来写(加上Sleep(1000)就可以了)。
雪    币: 5
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyports 2012-7-4 01:13
9
0
好的,谢谢大家,我试试看
雪    币: 558
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guijc 2012-7-4 16:30
10
0
这边人倒是挺多的,我在新手区问了一个问题,但是每一个人回复,

http://bbs.pediy.com/showthread.php?p=1084833&posted=1#post1084833

郁闷啊,没有邀请码,在这边发不了帖子,大家谁能帮忙回答下,或者帮我转发一下,谢谢
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
邋遢鬼 2012-7-4 17:31
11
0
我想可以只写不读吗?只在程序运行时度一次,显示出来,然后当显示的内容发生变化时,再将新内容写入文件。
雪    币: 316
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuweilie 2012-9-14 16:38
12
0
sleep函数
雪    币: 69
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
soechin 2012-9-14 17:27
13
0
> 我是從遊戲來讀取數據保存在INI文件裡做記錄,然後再把這個數據顯示在列表框上的,所以需要頻繁讀取數據
> 因為有個別的數據需要在不開遊戲的情況下也可以顯示,所以才保存在INI文件上,不知道還有什麼別的更好的辦法來做這個事

改變方法:
1. 資料的傳輸請使用 Send Message OR Shared Memory。
2. 在遊戲結束之前再把資料存進檔案中。
3. 偵測不到遊戲時,再從檔案中讀入資料。
4. 運算與顯示不需要同步,意思是,你一秒內可以運算一千遍以上,
    但可能只需要顯示十次就夠了。
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
junzou 2012-9-18 09:34
14
0
有变化时再读写更新
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caskywz 2012-10-2 17:56
16
0
延时.......
多线程...

这个用好就行了...
记得清理内存....
java可以无视
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hcsoftcn 2013-4-14 18:50
17
0
换个思路,先写到内存,再定期刷到ini里去,这样就不会占很高CPU了。
雪    币: 1689
活跃值: (380)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
hackerlzc 10 2013-4-14 19:28
18
0
内存映射不知道行不行。
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dynastyd 2013-4-19 09:48
19
0
你这样,收到消息,直接发送到界面显示,后台建个队列,随时处理发送过来的消息,保存到文本文件即可
如果先写文件,再显示,就慢了。
雪    币: 22
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
逐梦 2013-4-19 19:29
20
0
写在内存, 退出的时候保存一下即可
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wqxsim 2013-4-20 13:29
21
0
大神们求救,sleep函数怎样添加到exe文件中去呢?有些可执行文件需要的CPU频率很低,在高配置电脑上运行相当快,怎样添加sleep使其运行一步sleep一段时间呢?
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
玛鲁 2013-4-26 16:26
22
0
应该是你的读写策略有问题,文件是用来保存软件退出后的信息的,不是用来数据交换的,本来磁盘IO就比较慢,可以在关闭软件的时候保存,运行软件的时候读取,信息交换用内存来实现比较靠谱
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
菜鸟出道 2013-4-29 09:12
23
0
把文件隐射内存里,毕竟读些内存比硬盘快多了
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
exediy 1 2013-5-1 16:48
24
0
这位兄台正解了.
雪    币: 5
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyports 2013-11-29 07:07
25
0
非常感谢大家的帮忙,改用内存过渡方式挺好
游客
登录 | 注册 方可回帖
返回