Laden...

Singleton in seperaten AppDomains

Erstellt von Sixpack vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.403 Views
S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren
Singleton in seperaten AppDomains

Hallo zusammen,
ich habe mich am Wochenende mit einem Problem der besondern Art rumgeärgert, und zu keiner Lösung gekommen.
Aber lasst mich erstmal erklären: Es geht um eine Simulation namens rFactor.
Sie hat eine Plugin architektur mit native dll´s. Ich hatte die idee, ein plugin dafür zu schreiben, um über .NET damit zu arbeiten.
Weil ich es state of the art machen wollte und auch c++ programmiere bin, hatte ich die idee das in c++/cli zu machen, quasi eine gemischt dll. Damit habe ich auch schon erfahrung und das klappt auch soweit. telemetry daten werden in die native seite der dll eingeseist, und in einem beispiel projekt in c# kann ich auf die manged typen zugreigen, die ich in der dll implementiert habe.
jetzt habe ich aber ein kleines architektur proble. die simulation speist die daten auf der einen seite in die dll ein, und ich widerum will von der anderen seite drauf zugreifen. ich habe dann die managed klasse einfach als singleton implementiert.
die unmanaged seite schiebt die daten in den managed singleton, und die c# anwednung holst sie wieder raus. so sollte es jendenfalls sein! das problem ist aber, das die c# anwednung nicht die gleiche instanz des singleton nutzt wie die simulation.
jede seite hat quasi ihre eigene instanz, weil ja qausi aus 2 verschiedenen prozessen aus operiert wird. hat einerne idee wie man das lösen kann? oder einen besseren vorschlag am gesamt system?

2.223 Beiträge seit 2005
vor 17 Jahren

moin

wie wäre es mit einer Datei zum Datenaustausch

oder besser noch über einen TCP Stream

mfg

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

Datei ist denke ich zu langsam. tcp stream habe ich auch chon dran gedacht.
noch andere vorschläge?

N
4.644 Beiträge seit 2004
vor 17 Jahren

Bitte Punkt 3 in Wie poste ich richtig? beachten.

N
750 Beiträge seit 2004
vor 17 Jahren

Original von Noodles
Bitte Punkt 3 in
>
beachten.

dazu würde noch helfen ein paar absätze reinzubauen (wenn schon editiert wird).
ist dann bedeutend lesbarer.

nils

?( wer suchet, der findet auch! :]

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

willst du ne pommes dazu?

N
750 Beiträge seit 2004
vor 17 Jahren

Original von Sixpack
willst du ne pommes dazu?

nein danke! (und ich erspare mir weitere kommentare dazu)

aber du bist den aufforderungen von noodles auch nicht nachgekommen.
(threadtitel immer noch nichtssagend!!)

?( wer suchet, der findet auch! :]

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

Lol, aufforderung nachkommen? bin ich hier beim bund oder was? krieg ich haue wenn ichs nicht mache? schreib was zum thema oder änder den titel selbst.
wenns dir nicht passt, lösche es!

das diese forum mods immer meinen die müssten einen auf dicke hose machen...

2.223 Beiträge seit 2005
vor 17 Jahren

@sixpack

Entschuldige mal aber geht das ganze auch freundlicher ?

Ich glaube wenn du so weiter machst wirste Problemem bekomen das deine zukünftigen Fragen weiterhin beantwortet werden

mfg

N
750 Beiträge seit 2004
vor 17 Jahren

Original von Sixpack
Lol, aufforderung nachkommen? bin ich hier beim bund oder was? krieg ich haue wenn ichs nicht mache? schreib was zum thema oder änder den titel selbst.
wenns dir nicht passt, lösche es!

das diese forum mods immer meinen die müssten einen auf dicke hose machen...

  1. nein kein bund
  2. nein keine haue, aber was anderes
  3. nein ich ändere ihn jetzt erst recht nicht
  4. ja löschen wäre ne Idee
  5. ist nicht auf dicke hose machen, sondern es wurde einfach nur ein hinweis an dich gegeben. du willst ihn nicht umsetzen, also gut!

Original von blackcoin
Ich glaube wenn du so weiter machst wirste Problemem bekomen das deine zukünftigen Fragen weiterhin beantwortet werden

dem kann ich mich nur anschließen!!

?( wer suchet, der findet auch! :]

T
512 Beiträge seit 2006
vor 17 Jahren

Das war lediglich ein Hinweis, wie du die Chance erhöhst, das jemand überhaupt deinen Beitrag ließt, und dir dann entsprechend helfen kann. Ich persönlich hab auch keine Lust mich da durchzuarbeiten. Wenn das Lesen der Frage einfach etwas weniger quälend ist, bekommst du auch mehr, schneller und bessere Antworten.

Aber wenn dich das nicht interessiert, zwingt dich auch keiner die Hinweise zu befolgen.

e.f.q.

Aus Falschem folgt Beliebiges

M
1.439 Beiträge seit 2005
vor 17 Jahren

Wie dem auch sein, so ein ähnliches Problem habe ich auch (noch immer). Siehe Single Instanz einer DLL
Ich verwende derzeit .NET Remoting als Lösung. Aber allzu glücklich bin ich mit dieser Lösung nicht(Port muss frei sein und es muss ein Server vorhanden sein). Falls da noch jemanden etwas einfallen sollte, so würde ich mich auch sehr freuen.

lg
Georg

3.971 Beiträge seit 2006
vor 17 Jahren

Es gib in C# ein Schlüsselwort das "angeblich", laut MSDN, ein variable Prozessübergreifend im Betriebssystem zur Verfügung zu stellen um sie u.a. in Singletons zu verwenden. Es nennt sich volatile. Keine Ahnung ob es geht, bzw. wie. Hab nur davon gelesen.

Deshalb auh ->

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

M
1.439 Beiträge seit 2005
vor 17 Jahren

Hallo kleines_eichhoernchen!
Das Schlüsselwort volatile sagt dem Compiler nur, dass die Variable von außen(Hardware, Betriebssystem, anderer Thread) verändert werden kann. Deshalb wird eine solche Variable nie zwischen gespeichert, sondern immer der aktuelle Wert gelesen/geschrieben.

3.971 Beiträge seit 2006
vor 17 Jahren

achso... jetzt weiß ichs auch... dann kann ich leider nich helfen. ja über remoting gehts, bzw. üder mutexxe lässt sich das thread sicher gestalten

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

@nils
mir gefiel nur der befehlston nicht, kein grund unruhig zu werden... 😉

@topic
nach einigen rechernchen denke ich nun das remoting wohl die einzige möglichkeit darstellt das problem zu lösen.
welche erfahrung habt ihr mit der performance?
es sind viele daten (telemetry halt) die jede sekunde refreshed werden.
wenn das plugin langsam wird, wird die ganze simulation langsamer 🙁

T
512 Beiträge seit 2006
vor 17 Jahren

Ich hab mit Managed C++ noch nicht sonderlich viel gemacht und bin etwas darüber verwundert wie das wohl läuft.

Hast du die andere AppDomain selbst erstellt, oder baut es die automatisch als Trennwand zwischen managed und unmanaged?
Letzteres ist dann doch recht kompliziert zu handhaben, da wirst du wohl Remoting benutzen müssen. Performancemäßig müsste da der IPC Channel mit BinaryFormatter noch am Besten sein.

Wenn du die AppDomain aber selbst erstellst, was ja bei Plugins auch üblich ist, gibt es leichtere Wege.

Ganz prinzipiell brauchst du ja nur ein MarshalByRefObject auf der "anderen" Seite, was dir die Instanz von dem "Singleton" (was ebenfalls MarshalByRefObject erben muss) liefert. Bei selbsterstellter AppDomain ist es ja ganz leicht soetwas einzuschleusen.

e.f.q.

Aus Falschem folgt Beliebiges

S
8.746 Beiträge seit 2005
vor 17 Jahren

Ich kann mich dunkel entsinnen, dass irgendjemand hier mal ein AddDomain-übergreifendes Singleton via Remoting gebastelt hat...

N
750 Beiträge seit 2004
vor 17 Jahren

Original von Sixpack
@nils
mir gefiel nur der befehlston nicht, kein grund unruhig zu werden... 😉

....

hallo Sixpack,

sorry von meiner Seite, wenn das so rüberkam.
sollten wirklich nur Hinweise sein, zum befehlen bin ich wirklich nicht hier. (dafür ist ja die bundeswehr da) 😉
Thema geklärt.

nils

?( wer suchet, der findet auch! :]

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

Also selbst erstelle ich die AppDomain nicht!
Es ist ja so, das die native seite ein plugin von einer fremden applikation ist.die managed seite nehme ich als einstiegspunkt für meine applikation.
das native plugin soll dan die daten in den managed singleton schieben. das klappt ja auch, aber wenn ich von der anderen seite komme hab ich hlt nen anderen singleton, was ja eigentlich auch logisch ist! ich guck mir das mal mit remoting an, das habe ich zwar noch nie gemacht, aber sowas nehme ich immer als gute übungen, so lernt man am besten draus denke ich!

und zum thema maneged c++
ob managed c++ oder c#, es ist ja nur die syntax anders. gibt zwar paar besinderheit(gemischer code, pointer...) aber als alter c++ programmiere ist das ok!

3.728 Beiträge seit 2005
vor 17 Jahren
IPC-Kanal

remoting 2.0 stellt einen sogenannten IPC-Kanal zur Verfügung. Dieser dient der lokalen Interprozess-Kommunikation und ist verdammt schnell, da alles lokal im Hauptspeicher abgewicklet wird. Intern wird das Named Pipes-Protokoll eingesetzt.

Stichwort für Forumssuche: IpcChannel

3.971 Beiträge seit 2006
vor 17 Jahren

Mit Remoting lassen sich doch alle Klassen "austauschen" prozessübergreifend, in unterschiedlichen AppDomains und zu anderen Kompostern übertragen, die von der Klasse MarshalByRefObject geerbt haben. (Ich hab heut schon wieder ein deutsch...)

Da könnte man ja auch eine Datei (FileStream) im Netzwerk bearbeiten, also das verschiedene Leute gleichzeitig lesen und schreiben können? Ginge das?

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

S
Sixpack Themenstarter:in
84 Beiträge seit 2005
vor 17 Jahren

Hervorragend! IPC scheint genau das zu sein was ich brauche! Mich hat nämlich am Remoting der ganze Netzwerk Krempel gestört, weil es für meine Zwecke ein Overhead ist, da ich physikalisch auf den gleichen Computer bleibe.
Danke Rainbird!!!! 👍