小弟用Edit控件做了一个文本阅读器,功能基本实现了,但当读取比较大(400K左右)的txt文件时,延迟会非常大。跟踪下发现主要原因是: 把内存中的字符串放到Edit控件中,控件更新数据时的延迟大
m_strEdit = str;
UpdateData(FALSE);有什么办法可以解决?!大家做文本阅读器是如何实现的?
m_strEdit = str;
UpdateData(FALSE);有什么办法可以解决?!大家做文本阅读器是如何实现的?
调试欢乐多
UpdateData(FALSE); 进行更新的吗,不知道你的程序有多少个edit
UpdateData(FALSE);是更新所有的edit并显示,这有可能影响效率。
还有可能就是你读文件 和更新的速度协调上有问题,像读文件这样的工作量
比较大 比较影响效率的程序 最好是单拿出来一个线程来做。这样他不会影响
主线程 对界面的更新效率。《Sunny乐园》VC群招人中:62054240
如果开始就静态分配好一个足够大的空间用来获取str,那么比读取文本的中途不断的申请内存然后存放文本内容,前者应该是效率快一点吧。
就一个Edit,我是先把文本内容读入内存,然后再丢给Edit的。单独开辟一个线程也试了,整个都读下来容易,但在更新Edit数据的时候还是有很大延迟,而且发现文件大了,拖滚动条的时候有重影,即每行的文字都一样
我尝试了分块读取,即分配1K左右的空间,用来存读取的文件,然后把这1K左右的数据丢给m_strEdit,再把这个空间清空,再读1K,一直丢,直到文件的内容全都给了Edit,才释放的,还是没有解决慢的问题
这样的话有个问题,滚动条的位置不是显示不准确了啊还有其他方法可以实现文本阅读器吗?
控制数据量的难题在向上滚动时,滚动1行,一页,文件指针的起始位置不好确定,不然每读一次发现文字的位置发生变化
我是新手,第一次做这东西,按照自己想法做出来的还是有缺陷啊,哪位大哥指点指点?!!
控制数据量的难题在向上滚动时,滚动1行,一页,文件指针的起始位置不好确定,不然每读一次发现文字的位置发生变化
=====================
建议还是不要一次把数据全部显示,每次显示一部分。edit的话,一次不要把数据加完,等用户向下拉的时候在加................控制一下edit里面实际的数据量
==================================
这有个问题啊,比如我从文件的第500个字读了2k的内容在edit里,然后要向上滚动一(n)行,该怎么办呢?
如何计算文件指针fp的起始位置。因为在内容读入Edit前不知道前一行有几个字符,文件指针要偏移多少