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

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

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

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

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

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

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

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

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

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