关于ClientDataSet的性能与重新编译vcl

newsunet 2005-07-14 12:26:31

我在使用clientDataSet 的过程中发现它的效率非常低,我发现clientDataSet的效率低的原因一是因为clientDataSet的内存表操作性能不高,特别是当数据很大的时候,效率下降的很快.二是由于clientDataSet使用了dataSet中的Fieldbyname,FieldByName在大多数情况下调用的是TFields的FindField方法,而在这个方面中使用的是线性查找,逐个比对,如果字段很多的情况下,这是很耗资源的作法.

我对fieldbyname方法进行了改进,但是在我编译的时候,却有单元引用了db单元,由于不同的版本,而不能编译,我试着对所有的VCL进行了编译,已经通过了,经测试性能基本达到了我的要求,但是由于我使用了第三方的控件,而此控件我没有源码,故不能编译.

如何编解决问题呢,使我改写了VCL的源代码而又无需大范围改动.
...全文
76 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovend 2005-07-14
  • 打赏
  • 举报
回复
帮你顶
darkliu 2005-07-14
  • 打赏
  • 举报
回复
1.不用第三方控件

2.反编译第三方控件试试
类似“爱情类”RPG游戏,类似主题医院及暗黑破坏神的场景,还算曲折的故事情节,动听的音乐(MP3格式),动人的结尾动画(AVI格式因为太大,不便上传),现奉献全部源代码,及编译所需组件,有兴趣着可以用此来"编撰"自己未实现的梦. NewStar 1998操作系统: win98-win2000编译语言环境: Delphi 3.0 (4.0)美工:推荐 Abode Photoshop 4.0动画制作环境: 推荐Asymetrix DVP 4.0DELPHI3.0 游戏VCL组件安装:1、Anigrp10.dcu :动画工程师引擎,负责场景动画 安装方法:在DELPHI 3.0 IDE界面中选择Component->Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中Anigrp10.dcu,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将Anigrp10.dcu复制到Delphi3 安装目录 Lib目录下。2、AMixer.pas :声音控制引擎,负责声音效果 安装方法:在DELPHI 3.0 IDE界面中选择Component->Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中AMixer.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将AMixer.pas复制到Delphi3 安装目录 Lib目录下。2、MPEGPLAYER.pas: MP3音乐声音控制引擎,负责MP3音乐播放 安装方法:在DELPHI 3.0 IDE界面中选择Component->Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中MPEGPLAYER.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将MPEGPLAYER.pas复制到Delphi3 安装目录 Lib目录下。编译注意:在编译提供的样例程序时,请将Dbclient.dll及Mpegdll.dll复制到样例程序目录中。 场景对话文件编辑: 游戏中所有场景对话都保存在Dat.cdx文件中,要修改对话,可以用Delphi的ClientDataSet 组件的LoadFromFile及SaveToFile方法打开本文件读写,文件内容可以在DBGrid中显示,采用 DataSource来连接ClientDataSet和DBGrid.EMAIL: newstarchj@163.net
类似“爱情类”RPG游戏,类似主题医院及暗黑破坏神的场景,还算曲折的故事情节,动听的音乐(MP3格式),动人的结尾动画(AVI格式因为太大,不便上传),现奉献全部源代码,及编译所需组件,有兴趣着可以用此来 ";编撰";自己未实现的梦. NewStar 1998 操作系统: win98-win2000 编译语言环境: Delphi 3.0 (4.0) 美工:推荐 Abode Photoshop 4.0 动画制作环境: 推荐Asymetrix DVP 4.0 DELPHI3.0 游戏VCL组件安装: 1、Anigrp10.dcu :动画工程师引擎,负责场景动画 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中Anigrp10.dcu,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将Anigrp10.dcu复制到Delphi3 安装目录 Lib目录下。 2、AMixer.pas :声音控制引擎,负责声音效果 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中AMixer.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将AMixer.pas复制到Delphi3 安装目录 Lib目录下。 2、MPEGPLAYER.pas: MP3音乐声音控制引擎,负责MP3音乐播放 安装方法:在DELPHI 3.0 IDE界面中选择Component->;Install Components... 菜单,在弹出的窗体 Unit file name 栏目 选择Browse按钮,选中MPEGPLAYER.pas,点OK按钮,再编译组件, 如果出现File not Found...等错误提示,可以将MPEGPLAYER.pas复制到Delphi3 安装目录 Lib目录下。 编译注意:在编译提供的样例程序时,请将Dbclient.dll及Mpegdll.dll复制到样例程序目录中。 场景对话文件编辑: 游戏中所有场景对话都保存在Dat.cdx文件中,要修改对话,可以用Delphi的ClientDataSet 组件的LoadFromFile及SaveToFile方法打开本文件读写,文件内容可以在DBGrid中显示,采用 DataSource来连接ClientDataSet和DBGrid. EMAIL: newstarchj@163.net
2.5主要变动: 1.重要改进:新版本中Delphi下的VCL控件已经比较完善,封装良好,与Delphi无缝连接,改变了旧版中需要将Dataset中的数据复制到报表引擎中的实现方式,通过模拟ADO接口的方式直接支持BDE/ClientDataset/等非ADO方式的Dataset,不需要考虑太多的COM方面的因素,强烈建议Delphi的开发者直接使用该VCL控件。 使用VCL控件编译的程序发布时,将AcReport.dll和您的EXE放在同一个文件夹下一起发布即可,不需要运行RegSvr32来注册控件,VCL中的代码会自动注册该控件。 2.完善文本控制方式(在设计器界面上增加了此项菜单): 1).当文本控制设置为自动适应单元格(自动缩放字体)时,选择上对齐方式时,也能自动换行。 2)当文本控制设置为截断字符时,支持自动换行,保持单元格的高度不变,在某些特殊应用中,不管文本如何变化,可以保持表格的形状不变。 3.增加了OnSaveReport事件,当用户在设计器中点击“保存”按扭时,会触发此事件,程序可以响应此事件执行自定义保存,例如可以将报表保存到数据库中,或者返回一个信息给设计器用户。 4.直接支持ADO.net中的Dataset和DataTable对象,不需要再通过CustDataBuiler对象来转换,大大提高了在.net下的运行速度。(需要引用 AcNetUtils.dll,具体使用方法请参考Demo) 代码示例: //Dataset: //2.5以前的版本需要将Ado.net下datatable在AC中copy一个复本,速度比较慢 // AcReport.AcUtils.CopyDatasetToAcRptEngine(mDataset, mac, false); //新版本的处理方式,通过ADO-ADO.net适配器的方式直接访问 DbAdapter.FillDatasetToAC(mDataset, mac); //DataTable: mDataset.Tables["zlemployee"].TableName = "雇员档案"; AcReport.AcUtils.CopyTableToAcRptEngine(mDataset.Tables["雇员档案"], mac, false); //重新加入一个表到AcReport (旧版本方式) //在2.5以后的版本中,可以用如下的方式将ADO.net的DataTable对象通过AcRecordsetAdapter转换为ADO接口的方式直接加入到AcEngine, //这样做就不需要在AC中复制一个复本,大大提高的速度。 AcRecordsetAdapter RecordAdp = new AcRecordsetAdapter(mDataset.Tables["雇员档案"]); mac.AddNetAdoData("雇员档案", RecordAdp); // 以上两行也可以直接调用 AcNetUtils 类库里提供的现成方法(效果是一样的): AcNetUtils.DbAdapter.FillDataTableToAC(mDataset.Tables["雇员档案"], mac); 5.可拖动对象设计功能增强 6.支持 条码 Code128 Auto ACReport简介 Anycell Report(简称AC Report)是一款中国式报表组件,是国内最早的基于表格,支持图文混排、公式和脚本的中国式报表工具之一。就如Anycell Report的名称那样,灵活强大的表格功能一直是AC Report区别于其它软件或控件最显著的特征之一,AC Report 表格取消了传统表格概念中“列”的概念,每一行上的单元格数量可以不等,且可以自由活动,勿须上下对齐,在制作复杂的中国式报表时可以避免很多不必要的合并拆分操作,制作表格更加方便和随心所欲,并且省时省力。AC Report单元格支持多种丰富的形态,例如格式化文本、图片、图表、条码、OLE容器等。 AC Report的一些基本特点: 1.独具特色的表格,风格与Word表格相似,但可以做出比Word或Excel更灵活的表格来。 2. 功能全面、专业的中国式报表设计器,中国用户更易于学习和接受。 3.支持多种单元格样式,可以打印图像、图表(直方图、折线图等)、Rich文本、 条形码、中式财务帐薄、支持在报表中嵌入Word、Excel文档等。 4. 强大的计算和合计功能。内置表达式解析系统和函数库。 5. 可扩充性,可以在应用程序中给报表引擎扩充函数库、报表样式和单元格样式。 6.支持多种报表样式,如清单式、分组、交叉表、以及子报表

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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