繁体   English   中英

如何在不写入磁盘的情况下将XML从Delphi传递到C#?

[英]How can I pass XML from Delphi to C# without writing to disk?

我有一个Delphi应用程序,该应用程序生成一团数据,当前正在以xml格式写入文件系统。 然后,C#.Net应用程序会读取此数据以进行进一步处理。

问题在于对象图很大,并且生成的xml文件大小超过2 GB。 写入和读取xml文件都需要相对较长的时间。

而不是写入文件系统,我该如何在RAM中传输数据呢?

我有两个应用程序的源代码和编译器。 我正在为一个应用程序使用.Net版本4.0和VS2010。 另一个我正在使用Delphi 5(我可以使用更高版本,但是不确定迁移是否会有所帮助)。

更新:感谢所有建议,这需要大量处理。 我将在进一步审查后回发。

更多建议:

内存映射文件

命名管道

插座

RPC

ActiveX

我个人的建议是套接字,在Delphi端使用Indy ,在.NET端使用System.Net.Sockets

您可以将两者集成到一个流程中。 这将为您带来速度上的好处,因为您不需要任何进程间的通信。

做到这一点的三种方法:

  • 在C#进程中使用DLL将Delphi代码加载为DLL(使用PInvoke)
  • 使用逆向PInvoke在您的Delphi进程中将C#代码作为托管程序集加载
  • 使用RemObjects中的Hydra进行上述操作之一,并为您处理详细信息

如果使用Delphi XE2或更高版本执行此操作,则可以在单个64位进程中进行所有操作,并更轻松地分配2GB以上的内存。

您可以通过在将XML流写入磁盘时对其进行压缩(gzip等),然后在另一端进行解压缩,从而大大加快此过程。 如果您的尺寸减小了10倍,那么I / O数量也就减少了。 当然,您将I / O用于CPU工作,但对于CPU而言这相对容易。

您可以将其作为SOAP消息发送。

最好的方法,我现在使用它以30fps的速度将图像从C#传输到delphi是:


1-在创建ac#COM库中(公开GUI元素)
2-使用regasm注册ac#COM库-register -tlb dllname.dll
3-加载在delphi中创建的类型库并使用c#函数发送或检索任何数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM