让Delphi的DataSnap发挥最大效率

让Delphi的DataSnap发挥最大效率

一个DataSnap的应用程序由两个层组成:

DataSnap服务器,它有一个带有一个或者更多DataSetProvider组件的远程数据模块;DataSnap客户端,它带有一个xxxConnection组件和一个或者多个连接到DataSetProviders的ClientDataSets。

你可以不使用ClientDataSet而换用XMLBroker组件,后者是专门用在InternetExpress Web服务器应用程序上的。 DataSetProviders的作用是把数据导出到外部世界,而ClientDataSets的功能是接收数据(并把请求和更新发送回DataSetProvider)。许多DataSnap客户端都可以连接到单个DataSnap服务器,向服务器请求数据,而服务器往往就是数据吞吐量瓶颈发生的地方。

让我们开始吧 让我们就从这个问题的解决开始,确认线路上发送数据的真实量是很有必要的。因此,我们不会去研究(请求和接收数据的)ClientDataSets,而是要研究一下DataSetProvider组件——它会回应数据请求从而发送数据。

幸运的是,DataSetProvider组件有一些有用的虚拟方法,它们能够被用来强制替代(别的方法)以及包含我们的“追踪”代码,这样你就能够了解数据吞吐的真实情况。 一旦了解了情况,你就可以开始着手降低吞吐量了。当然,你不能因为能够优化就开始进行优化;总得有个原因。但是一旦有几百个客户端连接到你的DataSnap服务器,所有客户端都会请求成兆的数据,你就要因为这个原因而立即开始优化了。 DataSnap就是原来的MIDAS DataSnap技术是MIDAS的新名字,它在Delphi企业版里(或者C++Builder企业版里)被用来创建多层应用程序。当我谈到DataSnap的效率时,我主要关心的是数据吞吐量的瓶颈,包括限制从服务器层发送到客户层的数据量从而防止瓶颈的方法。在你能够限制吞吐量之前,你首先要测量它。

在本文的后半部分里,我会假设你有一个DataSnap服务器和客户端可用。如果你需要的话,可以在Delphi6DemosMidasMstrDtl获得一个DataSnap主从复合结构(master-detail)的示例项目。为了测量数据量,你把TdataSetProvider组件用一个叫做TB42DataSetProvider的专用版本替换掉。新的组件有一个BytesTransferred属性,它会包含自从其被创建以来被传送的字节数量。 它会强制替代InternalGetRecords方法,以增加FbytesTransferred里的值,并报告所传送的字节数量,还会报告新的数据包已经被发送,包括记录的数目以及数据包的大小。这两个方法(见Listing A)会被ClientDataSet或者XMLBroker组件调用,用以响应DataSnap客户端的数据请求。 要注意,eBob42PRO单元里的代码会使用InternalGetRecords和CreateDataPacket方法里的简单writeln声明。这就意味着你必须把{$APPTYPE CONSOLE}这一行添加到你DataSnap服务器的主项目里,这样才能为调式的输出打开一个控制台窗口。如果你忘了做这个,那也不用担心DataSnap服务器会向你报I/O错误了,因为IsConsole的检查会确保writeln声明只在控制台应用程序里被确实地调用。 要使用这个组件很简单:把TB42DataSetProvider组件添加到组件调色盘里的一个Delphi工具包里,并使用TB42DataSetProvider替换掉你远程数据模块上的普通TdataSetProvider。 ClientDataSet的PacketRecords 使用ClientDataSet连接到DataSetProvider(它指向整个表格)的潜在危险之一是:当你打开ClientDataSet的时候,它会缺省地从DataSetProvider请求所有的数据。这就意味着(服务器端)表格的全部内容都要通过线路送到ClientDataSet。对于Delphi自己的示例数据库表格当然是没有问题的,举个例子的话,因为消费者和订单的表格所包含的记录会少于100条。但是,在现实生活中,公司的消费者会多于100个(而订单的数量会更多),获取所有客户(的信息)会花上一段时间,在你每次打开ClientDataSet的时候把表格的内容从DataSnap服务器发送到DataSnap客户端也要花上一段时间。 解决这个问题的一种方法是使用ClientDataSet组件的PacketRecords属性。这个属性会对数据的初始请求进行修改,让其包含被请求数据包的大小(以记录的形式)。所以如果有上千条记录存在的话,你只用取得文件X,而文件X是PacketRecords属性的值。在缺省条件下,这个属性被设置为-1,即“把所有的记录都给我”。

转载于:https://www.cnblogs.com/m0488/p/3436656.html

让Delphi的DataSnap发挥最大效率相关推荐

  1. 效率 每秒_每秒看懂超过5.3亿张图片!异构计算是如何发挥AI效率的?

    简介: 潘岳介绍,阿里云提供了超大规模的云上异构计算集群,每秒可支撑100亿亿次的异构运算,能够在1秒内看懂超过5.3亿张图片:识别3.3亿秒/9.2万小时长的语音,相当于听写了1723本<红楼 ...

  2. delphi bmp绘制矢量文件效率慢_聊一聊矢量瓦片的常识

    一.矢量瓦片的基本原理和相关格式 现阶段,电子地图瓦片主要使用两种方式,一种是传统的栅格瓦片,另外一种是新出的矢量瓦片(Vector Tiles),前者是采用四叉树金字塔模型的分级方式,将地图切割成无 ...

  3. datasnap ajax jsonp,有没有办法在Delphi DataSnap REST服务器上使用JSONP?

    似乎没有办法使用DataSnap来实现带有Padding的JSONP(JSON)解决方案,但是我想在这里抛出这个问题以防有人解决了这个问题.有没有办法在Delphi DataSnap REST服务器上 ...

  4. Delphi历史版本介绍(二)从Delphi8到DelphiXE3

    Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8 Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直 ...

  5. Delphi XE 10 跨平台三层数据库应用教程

    Delphi XE 10 跨平台三层数据库应用教程 Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高.最容易上手的,其快速设计RAD理念是无 ...

  6. Delphi XE 10 跨平台三层数据库笔记

    Delphi XE 开始越来越庞大,比经典的Delphi7难用,但依然是目前所有跨平台开发工具中开发效率最高.最容易上手的,其快速设计RAD理念是无与伦比的符合人性. 目前网上XE10类似教程很少,而 ...

  7. 关于用DELPHI开发服务器软件中的一些经验

    保存 评价 游戏规则 免费注册 资料下载 关于本站 问题分类 编程问题 非技术题 富翁列表 我的信息 提出问题 在线富翁 富翁日历 笔记列表 我的笔记 写作笔记 全文检索 <专家门诊> / ...

  8. 如何发挥ERP系统中的财务监控职能?

    ERP系统的管理理念与特点 ERP,是整合了企业管理理念.业务流程.基础数据.人力物力.计算机硬件和软件于一体的企业资源管理系统.ERP系统运用信息技术将企业的资金流.物资流.信息流进行有效的集成,使 ...

  9. 10分钟10行代码开发APP(delphi 应用案例)

    总结一下用到的知识(开发环境安装配置不计算在内): 第六章  使用不同风格的按钮: 第十七章  让布局适应不同大小与方向的窗体: 第二十五章 使用 dbExpress访问 InterBase ToGo ...

  10. Delphi图像处理 -- 灰色浮雕

    阅读提示:     <Delphi图像处理>系列以效率为侧重点,一般代码为PASCAL,核心代码采用BASM.     <C++图像处理>系列以代码清晰,可读性为主,全部使用C ...

最新文章

  1. Ubuntu20.04 编译运行apue.3e 避坑指南
  2. 将虚拟主机加入到netskills.net域环境_网站建设阿里云虚拟主机、ECS服务器、企业邮箱选择购买指南...
  3. [Z]POJ 计算几何入门题目推荐[转PKKJ]
  4. EntiyFramework :Update model from database引起的两个问题
  5. JAVA入门级教学之(abstract抽象类)
  6. Python遇到的问题(一)
  7. Codeforces Round #321 (Div. 2) C. Kefa and Park dfs
  8. java多线程具体总结
  9. windows下安装rabbitmq以及php扩展amqp
  10. 乔安监控电脑客户端_公司上网监控使用安装电脑监控软件?
  11. 物联计算机大赛,计算机与物联网学院在本次计算机设计大赛中喜获佳绩
  12. Hbuilder屏幕旋转
  13. Exp9 Web安全基础实践 20164323段钊阳
  14. 记录一次排查Invalid bound statement (not found)问题
  15. Vulnhub-Tr0ll
  16. 至强系列服务器多少钱,至强E5-1600系列揭秘_服务器产业-中关村在线
  17. Linux命令之read命令
  18. 网络富豪 百度李彦宏全球第二
  19. 案例篇:Python天气播报系统,这才是未雨绸缪
  20. AE电源维修PDX8000射频电源维修

热门文章

  1. 对java类中注释的认识
  2. SqlServer中检查数据表是否存在
  3. 带你了解HTTP协议(一)
  4. jsp调用servlet方法_Servlet的运行原理
  5. java数据区_Java运行时数据区域介绍
  6. 如何升级浏览器_涨姿势|教你用手机一键升级路由器软件(固件)
  7. 谷粒商城:14.全文检索ElasticSearch
  8. SQL:MongoDB简述
  9. Openlayer:学习笔记之解析地图组成
  10. 在线协作编辑算法简介- OT算法