Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.04.2011, 08:03

eigenartiges GC Problem

Hallo Leute.

Ich habe ein für mich unverständliches und mir nicht erklärliches Problem.
Die Sache ist folgende:
Ich hab ein Programm geschrieben, welches sehr lange durchlaufen soll. Also ich rede von 5,6 Tagen.
Die eigentliche Funktion vom Programm ist nicht wirklich wichtig...

Nach ca 5,5 Tagen bricht das Programm mit einer Exception ab und behauptet der GC hätte meine RichTextBox eingesammelt.
Es is aber so, dass laufend auf diese Textbox geschrieben wird und 5,4 Tage gehts ja auch und dann eben nicht mehr.

Nach ein bisschen googeln bin ich zu dem Schluss gekommen, dass das eigentlich nicht möglich ist, denn die RichTextbox bekommt von der MainForm events
und solange die RTB events bekommt wird der GC sie nie einsammeln...

hat einer einen Plan, wo da das Problem sein könnte?

lg

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

04.04.2011, 09:57

Die Events an sich sind kein Grund, dass der GC sie nicht einsammeln könnte. Wichtig ist, dass irgendein Objekt eine Referenz auf die Text-Box hält und dass dieses Objekt ebenfalls gehalten wird und so weiter. Im Normfall sollte das bei Dir wohl der Fall sein, da Du die TextBox sicher nicht manuell erzeugst und die Referenz danach weg wirfst.

Die einzige Möglichkeit, die ich momentan sehe ist, dass Du von einem unmanaged Bereicht auf die Textbox zugreifst. Und das ist ein Problem, da der GC sich überlegen kann die managed Ressource einfach mal woanders hin zu verschieben und damit ist Deine Referenz aus dem unmanaged Bereich heraus ungültig. Das kann man vermeiden, indem man im managed Bereich eine Referenz auf die Event-Methode hinterlegt. Damit lässt der GC die Finger davon. Hatte ich schon das Problem... Callback aus einer unmanaged DLL in managed Code hinein.

Aber warum genau das Problem bei Dir auftritt ist damit natürlich noch nicht geklärt und ein paar Details wären gut zu wissen. Handelt es sich um rein managed Code bei Dir?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

04.04.2011, 11:56

hallo.
erstmal danke für deine antwort.

nein der code is nicht rein managed. es sind auch unmanaged teile dabei außerdem sind auch teile dabei, die über die serielle schnittstelle mit anderen geräten kommunizieren.

ABER :
auf die Textbox greif 100% immer nur aus managed code heraus zu.
und ja... klar... hab sie halt einfach von der toolbox in die form gezogen, also dachte ich dass sie nie weggeworfen werden kann, weil ja zumindest die MainForm
eine referenz drauf hat.

ich schreib auch laufend sachen raus auf die textbox... da sind gute 100 000 zeilen drin und dann nach knappen 6 tage... objectDisposedException...
ich hab dann eh schon alle ausgaben in ein log file geschrieben und da sieht man gut, dass in einer tour sachen geloggt werden (also auch auf die TB kommen)
und dann auf einmal... ende...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

04.04.2011, 15:43

Muss da so viel drin stehen oder reicht nicht vielleicht auch ein Auszug?
Das dürfte zwar an sich kein Problem sein, aber... was besseres fällt mir da nicht ein.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

06.04.2011, 09:28

mh... du meinst dass vieleicht zu viel text drin steht und der gc dann irgendwann meint es einsammeln zu müssen?

also speichertechnisch is es eigentlich so, dass der rechner 4gb hat und die anwendung ca 300mb verbraucht....(laut taskmanager)

ich hab es jetzt eh schon mal probiert alles in ein file zu loggen und nicht in die textbox... mal schaun was da rauskommt.... lauft ja erst 2 tage...

danke für deine antworten und ich melde mich wieder wenn es neuigkeiten gibt.

lg aly

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

06.04.2011, 09:29

Ja, melde Dich mal, was dabei raus kommt, interessiert mich aus gegebenem Anlass durchaus.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

11.04.2011, 12:25

Hallo BlueCobold

Es schaut alles stark danach aus, dass es wirklich das problem war , dass ich zu viel in die textbox geschrieben habe....
ich schreib jetzt eigentlich nix mehr raus, nur größere "überschriften" und logge ja sowieso alles in ein file mit...

jedenfalls
danke für deinen tipp.
auf die idee wär ich denk ich nicht so schnell gekommen, da ich nicht gedacht hab dass ich mehr als 2147483647 chars schreibe...

lg

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

11.04.2011, 13:08

Hehe. Super. :)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige