加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 共享数据系统

发布时间:2020-12-15 04:17:12 所属栏目:大数据 来源:网络整理
导读:晚上好. 我正在寻找一种方法来从我的系统应用程序共享数据,以便其他应用程序可以读取该数据然后随意执行任何操作(例如,将其格式化以便显示,将其用于日志记录等).数据需要在方法本身中动态更新. WMI首先浮现在脑海中,但是当你从WMI阅读时,你会遇到应用程序暂
晚上好.
我正在寻找一种方法来从我的系统应用程序共享数据,以便其他应用程序可以读取该数据然后随意执行任何操作(例如,将其格式化以便显示,将其用于日志记录等).数据需要在方法本身中动态更新.

WMI首先浮现在脑海中,但是当你从WMI阅读时,你会遇到应用程序暂停的问题.另外,如果在Delphi中甚至可以实现,我也不知道如何设置我自己的命名空间或类.

使用文件是另一个想法,但这可能会让磁盘变得很重,而且这对于实时数据来说是一种非常糟糕的方法.

使用驱动程序可能是最好的选择,但是根据我的喜好,这对用户端来说有点过于干扰,而且我不知道从哪里开始使用它.

WM_COPYDATA会很棒,但我不确定它是否足够动态,以及它是否会对资源造成沉重负担.

使用TCP / IP将是通过网络的最佳选择,但在没有网络要求的单个系统上运行时显然没什么用处.

正如你所看到的,我正在努力弄清楚要去哪里.我不想进入一种方法只是为了发现它最终不会成功.本质上,类似于服务或后台进程,用于记录数据,然后允许其他应用程序读取该数据.我只是不确定方法.我宁愿不需要提升/ UAC这样做,但如果需要,我会满足于此.

我正在使用Delphi 2010进行此练习.

有任何想法吗?

解决方法

您想要创建一些客户端 – 服务器体系结构,也称为IPC.

使用WM_COPYDATA是一个非常好的主意.我发现它在本地机器上非常快速,轻便且高效.它可以在系统上广播,同时对所有应用程序进行广播(如果某些应用程序无法正确处理,则要小心使用).

您还可以使用内存映射文件共享一些内存.对于大量数据,这可能是最快的IPC选项,但同步有点复杂(如果您想一次共享多个缓冲区).

命名管道是当地的好选择.由于现代Windows版本的安全问题(并且使用TCP / IP进行网络通信 – 因此您最好直接使用TCP / IP),它们往往很难通过网络实现/配置.

我个人的建议是,您应该使用抽象类实现数据共享,能够提供多种实现.您可以先使用WM_COPYDATA,然后切换到命名管道,TCP / IP或HTTP,以便通过网络传播您的应用程序.

对于我们的开源客户端 – 服务器ORM,we implemented several protocols,包括WM_COPY_DATA,命名管道,HTTP或直接进程内访问.您可以查看为实现模式提供的源代码.以下是一些基准测试,为您提供实际实现的数据:

Client server access: 
  - Http client keep alive: 3001 assertions passed
     first in 7.87ms,done in 153.37ms i.e. 6520/s,average 153us
  - Http client multi connect: 3001 assertions passed
     first in 151us,done in 305.98ms i.e. 3268/s,average 305us
  - Named pipe access: 3003 assertions passed
     first in 78.67ms,done in 187.15ms i.e. 5343/s,average 187us
  - Local window messages: 3002 assertions passed
     first in 148us,done in 112.90ms i.e. 8857/s,average 112us
  - Direct in process access: 3001 assertions passed
     first in 44us,done in 41.69ms i.e. 23981/s,average 41us
  Total failed: 0 / 15014  - Client server access PASSED

如您所见,最快的是直接访问,然后是WM_COPY_DATA,然后是命名管道,然后是HTTP(即TCP / IP).消息是大约5 KB的JSON数据,包含113行,从服务器检索,然后在客户端上解析100次(是的,我们的框架很快:)).对于大量数据块(如4 MB),WM_COPY_DATA比命名管道或HTTP-TCP / IP慢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读