在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?

yuanl 2007-03-23 10:39:41
在用listctrl控件中,如果数据量很大,就会造成机器很慢或死机,有没有别的办法解决 ?
...全文
477 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
albertdiao 2010-11-23
  • 打赏
  • 举报
回复
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中,再用虚模式,设置值.应该没问题.
内容概要:本文提出了一种针对电动汽车集群并网的分布式鲁棒优化调度模型,旨在应对大规模电动汽车接入电网所带来的不确定性与调度复杂性。该模型采用分布式优化框架,结合鲁棒优化理论,有效处理由用户行为、充电需求及可再生能源出力等多重不确定性因素引起的调度风险。通过构建考虑电池损耗、用户响应意愿及电网约束的多目标优化问题,实现了在保证电网运行安全与稳定的同时,最大化社会整体效益与用户参与积极性。文中详细阐述了模型的数学构建、求解算法及仿真验证过程,展示了该方法在降低峰值负荷、平抑负荷波动以及提升可再生能源消纳能力方面的显著优势。; 适合人群:具备一定电力系统、优化理论和MATLAB编程基础,从事智能电网、电动汽车调度、分布式能源管理等相关领域研究的研发人员和研究生。; 使用场景及目标:①为电力系统运营商提供高比例电动汽车接入场景下的鲁棒调度决策支持;②为学术研究人员提供分布式鲁棒优化在复杂能源系统中应用的典型案例与代码参考;③目标是提升电网韧性,优化资源配置,并促进电动汽车与电网的协同发展。; 阅读建议:此资源以MATLAB代码实现为核心,建议读者在学习时结合算法原理与代码细节,通过修改参数和场景设置进行仿真复现与结果分析,以深入理解分布式鲁棒优化的内在机制及其在解决实际工程问题中的应用价值。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧