Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将XML从Delphi传递到C#,而不写入磁盘?_C#_Delphi_Ipc - Fatal编程技术网

如何将XML从Delphi传递到C#,而不写入磁盘?

如何将XML从Delphi传递到C#,而不写入磁盘?,c#,delphi,ipc,C#,Delphi,Ipc,我有一个Delphi应用程序,它生成一个blob数据,我目前正在将其作为xml写入文件系统。然后,C#.Net应用程序读入这些数据进行进一步处理 问题是对象图很大,生成的xml文件大小为2GB以上。编写xml文件和读取xml文件都需要相对较长的时间 如何将数据传输到RAM中,而不是写入文件系统,这样会更快 我有两个应用程序的源代码和编译器。我在一个应用程序中使用.Net 4.0版和VS2010。另一个我正在使用Delphi5(我可以访问更高版本,但我不确定迁移是否会有所帮助) 更新:感谢所有的建

我有一个Delphi应用程序,它生成一个blob数据,我目前正在将其作为xml写入文件系统。然后,C#.Net应用程序读入这些数据进行进一步处理

问题是对象图很大,生成的xml文件大小为2GB以上。编写xml文件和读取xml文件都需要相对较长的时间

如何将数据传输到RAM中,而不是写入文件系统,这样会更快

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


更新:感谢所有的建议,需要处理的事情很多。我将在进一步审查后发回

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

有三种方法可以做到这一点:

  • 在C#进程中将Delphi代码作为DLL加载(使用PInvoke)
  • 在Delphi进程中,使用
  • 使用from RemObjects执行上述操作之一,并为您处理详细信息

如果使用Delphi XE2或更高版本进行此操作,则可以在单个64位进程中拥有所有内容,并且更容易分配2GB+的内存。

您可以将两者集成到单个进程中。这将给您带来速度优势,因为您不需要任何进程间通信

有三种方法可以做到这一点:

  • 在C#进程中将Delphi代码作为DLL加载(使用PInvoke)
  • 在Delphi进程中,使用
  • 使用from RemObjects执行上述操作之一,并为您处理详细信息
如果使用Delphi XE2或更高版本进行此操作,您可以在一个64位进程中完成所有操作,并更轻松地分配2GB+的内存。

还有一些建议:

我个人的建议是Socket,在Delphi端和.NET端使用。

还有一些建议:


我个人的建议是套接字,在Delphi端和.NET端使用。

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

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

您可以在将XML流写入磁盘时压缩(gzip等)XML流,然后在另一端解压缩,从而大大加快速度。如果您的大小减少了10倍,因此I/O也减少了10倍,请不要感到惊讶。当然,您是在用I/O换取CPU工作,但对CPU来说,这是相对容易的工作。

您可以在将XML流写入磁盘时压缩(gzip等)XML流,然后在另一端进行解压缩,从而大大加快速度。如果您的大小减少了10倍,因此I/O减少了10倍,请不要感到惊讶。当然,您是在用I/O换取CPU工作,但对CPU来说,这是相对容易的工作。

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


1-在创建c#COM库中(公开GUI元素)
2-使用regasm-register-tlb dllname.dll注册c#COM库

3-加载在delphi中创建的类型库并使用c#函数发送您检索任何数据的最佳方法,我现在使用它以30fps的速度将图像从c#传输到delphi是:


1-在创建c#COM库中(公开GUI元素)
2-使用regasm-register-tlb dllname.dll注册c#COM库

3-加载在delphi中创建的类型库,并使用c#函数发送您检索任何数据

如何使用套接字。delphi 5充满了大量内存泄漏问题。。您是否可以访问Delphi 7或更高版本。。或者棱镜…?有很多方法可以实现这一点。我建议你看看。最适合您的方法在很大程度上取决于项目的规范。@DJKRAZE建议添加对
应用程序的调用。ProcessMessages
没有帮助。我的建议是找到任何此类电话并将其删除。如果进程很慢,并且UI需要保持活动状态,请按照自然的意图将长时间运行的代码放在后台线程中。@DJ Delphi 5当然是老版本,但这并不意味着您必须放弃常识,开始调用Application.ProcessMessages,就像VB6程序员调用DoEvents一样。我非常熟悉Delphi 5谢谢。使用套接字如何。Delphi 5充满了大量内存泄漏问题。。您是否可以访问Delphi 7或更高版本。。或者棱镜…?有很多方法可以实现这一点。我建议你看看。最适合您的方法在很大程度上取决于项目的规范。@DJKRAZE建议添加对
应用程序的调用。ProcessMessages
没有帮助。我的建议是找到任何此类电话并将其删除。如果进程很慢,并且UI需要保持活动状态,请按照自然的意图将长时间运行的代码放在后台线程中。@DJ Delphi 5当然是老版本,但这并不意味着您必须放弃常识,开始调用Application.ProcessMessages,就像VB6程序员调用DoEvents一样。我非常熟悉Delphi 5谢谢。