社区
界面
帖子详情
在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?
yuanl
2007-03-23 10:39:41
在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?
...全文
442
7
打赏
收藏
在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?
在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
albertdiao
2010-11-23
打赏
举报
回复
虚模式
http://blog.sina.com.cn/s/blog_49c93b880100iw2k.html
yuanl
2007-03-23
打赏
举报
回复
一个月就有8000条数据量,
这是一个收费数据
dazedase
2007-03-23
打赏
举报
回复
Ado1000条以内速度不慢啊
难道有10000条?
也可在listctrl的OnGetdispinfo中来获取数据(可能需要派生一个CYourlistctrl)
这样只有看得到的Item才从库中取数据,不用循环,速度快
但是很麻烦,易出错
yuanl
2007-03-23
打赏
举报
回复
这种办法试了,不行
不知是不是处理上有问题:
_variant_t var;
CString str1,str2,str3,bl,strbz,gshbl;
gsl = 0;
je = 0.0;
ClearList();// 清空列表框
FillSRecordlist();
str1=str2=str3="";
int i=0,inths=0,fhhs=0;
bbrow = 0;
try
{
//刷新一下数据表内
if(!theApp.m_pRecordset->BOF)
theApp.m_pRecordset->MoveFirst();
m_list.SetRedraw(FALSE);
while(!theApp.m_pRecordset->adoEOF)
{
bl.Format("记录%d",i+1);
m_list.InsertItem(i,bl);
var = theApp.m_pRecordset->GetCollect("id号"); if(var.vt != VT_NULL)
str1 = (LPCSTR)_bstr_t(var);
if( str1 != gshbl)
{
inths++;
gshbl = str1;
if(str1.Right(1) =='B')
fhhs++;
}
m_list.SetItemText(i,1,str1);
var = theApp.m_pRecordset->GetCollect("用户名称");
if(var.vt != VT_NULL)
str1 = (LPCSTR)_bstr_t(var);
m_list.SetItemText(i,2,str1);
var = theApp.m_pRecordset->GetCollect("售量");
if(var.vt != VT_NULL)
{
str2 = (LPCSTR)_bstr_t(var);
gsl += atoi(str2);
}
m_list.SetItemText(i,3,str2);
var = theApp.m_pRecordset->GetCollect("性质");
if(var.vt != VT_NULL)
str1 = (LPCSTR)_bstr_t(var);
m_list.SetItemText(i,4,str1);
if(FillDjwithRecrd(str1))
m_list.SetItemText(i,5,str);
var = theApp.m_pRecordset->GetCollect("金额");
if(var.vt != VT_NULL)
{
str1 = (LPCSTR)_bstr_t(var);
if(m_int3 == 0 )
{
if(atof(str1) == 0.0)
{
str3.Format("%.2f",atoi(str2)*atof(str));
strbz = str3;
strbz += "未";
}
else
{
str3 = (LPCSTR)_bstr_t(var);
strbz = str3;
}
}
if(m_int3 == 2 )
{
str3.Format("%.2f",atoi(str2)*atof(str));
strbz = str3;
strbz += "未";
}
if(m_int3 == 1 || m_int3==4)
{
str3 = (LPCSTR)_bstr_t(var);
strbz = str3;
}
je += atof(str3);
}
m_list.SetItemText(i,6,strbz);
i++;
theApp.m_pRecordset->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示
bl.Format("%s","合计:");
m_list.InsertItem(i,bl);
str3.Format("%d次",i);
bbrow = i;
m_list.SetItemText(i,1,str3);
str3.Format("%d户(%d分户)",inths,fhhs);
m_list.SetItemText(i,2,str3);
str3.Format("%d",gsl);
m_list.SetItemText(i,3,str3);
str3.Format("%.2f",je);
m_list.SetItemText(i,6,str3);
m_list.SetItemCount(0);
m_list.SetRedraw(TRUE);
m_list.Invalidate();
m_list.UpdateWindow();
if(i == 0)
m_btn2.EnableWindow(FALSE);
else
m_btn2.EnableWindow(TRUE);
SetRedraw(TRUE);
}
catch(_com_error *e)
{
MessageBox(e->ErrorMessage(),"提示",MB_ICONINFORMATION|MB_OK);
}
dazedase
2007-03-23
打赏
举报
回复
m_List.SetRedraw(FALSE);//<--!!提高响应速度
插入数据....
m_List.SetRedraw(TRUE);//<--!!恢复
jinxuliang
2007-03-23
打赏
举报
回复
使用虚拟表
不就快了
codeproject有文章
raymonzhao
2007-03-23
打赏
举报
回复
先将数据取出放在一个variant中,再用虚模式,设置值.应该没问题.
listctrl
控件
的显示问题
m_List.SetRedraw(FALSE);//插入数据....m_List.SetRedraw(TRUE);//这样可以避免当
数据量
过大时,
listctrl
在显示上出现
死机
现象
VC6.0的若干实用小技巧
作者:VC教程 来源:http://www.d9soft.com 时间:2006-2-11 1:30:501.检测程序
中
的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还
会
发出一声警告声。2.查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如
金蝶云苍穹
中
级面试题
金蝶云苍穹
中
级面试题,包含真题,正确率70%
面试总结
面试总结 关于redis问题: 缓存穿透: 使用redis的常用场景是通过key先去redis
中
获取数据,没有再去数据库
中
查询然后存入redis
中
,当这种情况下可以利用一个缓存根本查不到的key,让代码频繁访问数据库,而且数据库也查不到值返回null无法存入redis
中
,相当于缓存
中
间层失效了,而高并发可能
会
压垮数据库,所以解释为穿透了;
解决
方案: 简单粗暴法: 如果数据库查询的数据返回空或者异常,我们存入一个空字符串进redis
中
,并设置过期时间及时清理,可能有小部分并发请求刚进来能够去读取数据库,大部
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章