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

时间:2012-10-04 16:12:14

标签: c# delphi ipc

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

问题是对象图很大,生成的xml文件大小为2 GB +。编写xml文件需要相对较长的时间,并且还要读取它。

如何在RAM中将数据传输到更快的位置,而不是写入文件系统?

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

更新:感谢所有的建议,这需要处理很多。我会在进一步审查后回复。

5 个答案:

答案 0 :(得分:6)

更多建议:

Memory Mapped Files

Named Pipes

Sockets

RPC

ActiveX

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

答案 1 :(得分:3)

您可以将两者集成到一个流程中。这将为您提供速度优势,因为您不需要任何进程间通信。

三种方法:

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

如果您使用Delphi XE2或更高版本,可以在一个64位进程中完成所有操作,并且更容易分配2GB +内存。

答案 2 :(得分:2)

通过在将XML写入磁盘时压缩(gzip等)XML流,然后在另一端解压缩,您可以大大提高速度。如果你的尺寸减少10倍,那么不要惊讶,因此I / O.当然,您正在为CPU工作交易I / O,但对CPU而言相对容易。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

最好的方法,我现在使用它以30fps将图像从c#转移到delphi:


1-创建一个c#COM LIBRARY(暴露GUI元素)
2-使用regasm -register -tlb dllname.dll注册c#COM LIBRARY
3-加载在delphi中创建的类型库,并使用c#函数发送ou,恢复任何数据