Einzelnen Beitrag anzeigen

wido

Registriert seit: 2. Jan 2006
122 Beiträge
 
#2

Re: welche ipc mit großen datenmengen aus injected .dll

  Alt 1. Apr 2008, 12:53
Ich hab aus gegebenem Anlass mal ein paar "Performance Messungen" durchgeführt vor einiger Zeit in Puncto IPC Methoden. Dabei hab ich Pipes, RPC und Shared Memory verglichen.

Die schnellste Methode ist definitiv Shared Memory, allerdings ist das Problem, daß Du selbst für die Synchronisierung zuständig bist. Solange Du nur einen Prozess hast, der den Shared Memory liest und nur einen der darin schreibt, ist das Ganze relativ einfach. Sobald es mehrere werden, wirds aber schnell komplexer und man produziert relativ leicht Dead Locks.

Nicht ganz so schnell, aber immer noch sehr gute Performance, bieten Named Pipes. Vorteil ist, daß Du rudimentäres "Session Management" hast, Du Dich nicht selbst um jeden Scheiß kümmern musst und man dein Problem wahrscheinlich in ca. 10 - 20 Zeilen Code lösen könnte.

RPC ist mit Abstand das langsamste. Allerdings erhälst Du komfort pur. Du musst keine Datenstrukturen parsen oder ähnliches. Übernimmt alles RPC für Dich. Hochleistung erreichst Du allerdings eher nicht.

Von WM_COPYDATA würde ich abraten. Bei Windows 9x wurden bei mir regelmäßig Messages "verschluckt". Abgesehen davon kannst Du halt nur mit Hilfe von Fenstern kommunizieren, die sich in der selben Session befinden. Eine Möglichkeit mit Services zu reden ohne die Systemsicherheit zu gefährden, existiert z.B. nicht.

TCP/IP wäre noch eine Möglichkeit, allerdings gibts da dann regelmäßig Probleme mit Firewalls.

Im Endeffekt solltest Du schauen was Du möchtest. Wenn Du nur einen Client hast und das sicher auch immer nur ein Client sein wird, dann nutz Shared Memory. Bei mehreren Clients gibts dort dann allerdings schnell mal Kopfweh. Wenn Dir minimale Performanceeinbussen allerdings nichts aus machen, nimm Named Pipes. Ist bei weitem angenehmer, allerdings nur auf NT basierenden Systemen.

Multi Threading wäre übrigens definitiv anzuraten - egal welche IPC Methode Du dann letztlich implementierst.
  Mit Zitat antworten Zitat