Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Singleton in seperaten AppDomains
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

Singleton in seperaten AppDomains

beantworten | zitieren | melden

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?
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2.223
Herkunft: Witten

beantworten | zitieren | melden

moin

wie wäre es mit einer Datei zum Datenaustausch

oder besser noch über einen TCP Stream

mfg
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Datei ist denke ich zu langsam. tcp stream habe ich auch chon dran gedacht.
noch andere vorschläge?
private Nachricht | Beiträge des Benutzers
Noodles
myCSharp.de - Experte



Dabei seit:
Beiträge: 4.644
Herkunft: Leipzig

beantworten | zitieren | melden

Bitte Punkt 3 in Wie poste ich richtig? beachten.
private Nachricht | Beiträge des Benutzers
nils
myCSharp.de - Experte



Dabei seit:
Beiträge: 750
Herkunft: Nähe von Kassel

beantworten | zitieren | melden

Zitat
Original von Noodles
Bitte Punkt 3 in Wie poste ich richtig? 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! :]
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

willst du ne pommes dazu?
private Nachricht | Beiträge des Benutzers
nils
myCSharp.de - Experte



Dabei seit:
Beiträge: 750
Herkunft: Nähe von Kassel

beantworten | zitieren | melden

Zitat
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! :]
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Lars Schmitt
myCSharp.de - Experte

Avatar #avatar-2240.jpg


Dabei seit:
Beiträge: 2.223
Herkunft: Witten

beantworten | zitieren | melden

@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
private Nachricht | Beiträge des Benutzers
nils
myCSharp.de - Experte



Dabei seit:
Beiträge: 750
Herkunft: Nähe von Kassel

beantworten | zitieren | melden

Zitat
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!
Zitat
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! :]
private Nachricht | Beiträge des Benutzers
Traumzauberbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 512

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
marsgk
myCSharp.de - Member



Dabei seit:
Beiträge: 1.439
Herkunft: Linz, Austria

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
marsgk
myCSharp.de - Member



Dabei seit:
Beiträge: 1.439
Herkunft: Linz, Austria

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

@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
private Nachricht | Beiträge des Benutzers
Traumzauberbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 512

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8.746
Herkunft: Berlin

beantworten | zitieren | melden

Ich kann mich dunkel entsinnen, dass irgendjemand hier mal ein AddDomain-übergreifendes Singleton via Remoting gebastelt hat...
private Nachricht | Beiträge des Benutzers
nils
myCSharp.de - Experte



Dabei seit:
Beiträge: 750
Herkunft: Nähe von Kassel

beantworten | zitieren | melden

Zitat
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! :]
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

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!
private Nachricht | Beiträge des Benutzers
Rainbird
myCSharp.de - Experte

Avatar #avatar-2834.jpg


Dabei seit:
Beiträge: 3.728
Herkunft: Mauer

IPC-Kanal

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
kleines_eichhoernchen
myCSharp.de - Member

Avatar #avatar-2079.jpg


Dabei seit:
Beiträge: 3.971
Herkunft: Ursprünglich Vogtland, jetzt Much

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
Sixpack
myCSharp.de - Member



Dabei seit:
Beiträge: 84
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

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!!!!
private Nachricht | Beiträge des Benutzers