[英]IPC with gui (Java & Native code)
我的申請由兩部分組成 -
Java中的一些GUI邏輯。 本機代碼(主要是Delphi) - GUI實現本身。
Java使用本機代碼進行簡單的操作,例如打開窗口和響應用戶輸入事件 - 實現是通過JNI完成的。
我有興趣將雙方分成不同的流程 - 在不掛gui的情況下,在它們之間實施IPC的最佳方法是什么? 我傾向於TCP套接字或共享內存,但在我深入研究之前,我很樂意聽到一些意見。 性能和簡單的實現是我主要關注的問題。
提前致謝。
如果您的問題是關於內存消耗
如果你的RAM不足(正如你的評論所暗示的那樣 - 但你應該在你的主要問題中寫得更好:你提供的細節越多,得到的答案就越好)。
你為什么要混用Java和Delphi? Java可能不適合處理超過1 GB的內存,因為它對於常見任務和內部GC具有更高的內存消耗。 即使你以64位運行JVM,你也會遇到新的擴展問題:你應該編寫非常具體的代碼來處理Java的大量內存。
公平地說,問題不是來自Delphi,而是來自Java內存消耗。 因此,恕我直言,你應該更好地用本機代碼編碼你的數據層。 Java可能會增加您的問題。
你可以:
主要方法是:只在內存中保留所需內容,並使用Map / Reduce算法或某種索引。
如果您的問題是在Java和Delphi之間混合使用GUI
從我的實驗來看,這可能很難,因為JNI傾向於使用自己的線程,而VCL期望它的所有進程都在主線程中運行。
所以你可以:
在所有情況下...
對於IPC,內存映射文件比套接字更快,但GDI消息在處理少量數據時是理想的。 套接字是很好的候選者,並且在本地機器上也會很快:如果傳輸的數據量僅為幾KB(例如高達1 MB),則內存映射文件的小開銷將不會顯着; 如果您需要創建應用程序的輕客戶端版本,它仍然可以工作。
你的答案的問題取決於你的要求(假設你有充分的理由以這種方式划分申請):
如果你需要做“瑣碎”的任務,即不需要太多的數據傳輸,那么使用套接字可能更好。 您需要創建一個協議,例如尊重字節順序。 還請注意,傳輸數據會降低您的gui響應速度。
如果需要傳輸大量數據,使用共享內存可能會更高效。 請注意,您需要自己完成簿記,這是通過tcp實現(例如發送/接收緩沖區)完成的。 使用此需要協議的問題變得更糟。
如果您想要一個簡單的實現,那么不要將應用程序分成兩個進程。 性能方面,這不是問題,但是您要在單個應用程序中添加高於復雜性的順序。 您需要有一個非常充分的理由將應用程序划分為多個過程,以克服您使用此架構提供相同功能所需的時間和精力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.