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