巨痛苦!百万条记录在CRichEditCtrl中显示的问题求解。工程描述:
一个对话框,上面有3个RichEdit控件,显示查询结果。要求对某些字串着色显示,用了RTF。Unicode工程,VS2010环境。
查询结果保存在CStringArray中,最多的时候每个RichEdit都要输出100万条记录,每条记录文字也较多。问题:
最初用的SetSel和ReplaceSel,很慢很慢,闪烁。后来加了SetRedraw,效果不明显。放弃。
改用StreamIn,先把结果存在临时文件中(RTF),然后一次性StreamIn。临时文件最大时有30M,大大超过了pcb buffer(4K)的值,回调函数只好每次StreamIn最大buffer值,循环读取。效果有所改善。
问题来了,由于有多个RichEdit,每次输出,竟然只能显示出第1个RichEdit的内容,第2个和第3个都不显示。仔细检查了代码,怀疑是回调函数的问题。又为每个RichEdit的StreamIn创建名称不同但内容相同的回调函数,问题依旧。求解:
(1)为什么只能显示一个RichEdit的内容?
(2)如果不采取空间换时间的策略,还有没有其他的替代方案?恳求解答!谢谢。

解决方案 »

  1.   

    自己管理文件内容映射,一次只读取当前屏幕或者几个屏幕的内容,大文件都是这么做的,全load进来啥edit都吃不消
      

  2.   

    为啥要用RICHEDIT,不用表格么?
      

  3.   


    List控件方便着色吗?(用得很少。)
      

  4.   

    通常这样数据库记录都是用分页来显示,每次少量记录数(例如20条),做web开发的都知道
    我相信没有人会看完100万条记录或者找一个控件,能支持RTF,还有只绘制当前显示区域Rect的内容,不全部都绘制的
      

  5.   

    推荐使用MFCGrid,另外显示数据时每次显示一定量的数据,如50条等,可通过翻页等类似操作实现所有数据的浏览
      

  6.   


    你搜个GridCtrl,着色很方便的,RichEdit效率相对来说有点低下了
      

  7.   

    GridCtrl用了,速度很快。但不符合程序的要求。
    至于多个RichEdit不显示的问题,为每个派生一个类就好了。
    谢谢各位!