Laden...

System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)

Erstellt von digi333 vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.552 Views
D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 10 Jahren
System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)

Ich habe das folgende Problem beim serialisieren einer eigenen Klasse. Exakt dieses Objekt kann ich nicht serialisieren, jedoch andere Werte mit der gleichen Klasse funktionieren.

Die Fehlermeldung kann ich selber nicht ganz deuten. Was soll ich machen oder warum kann ich das Objekt aus dem Speicher nicht auf die Festplatte speichern?

Nutze VS 2013 mit .Net Framework 4.5

F
10.010 Beiträge seit 2004
vor 10 Jahren

Du hast da jetzt nicht allen ernstes ein Array mit 1 Milliarde Floats drin?

2.079 Beiträge seit 2012
vor 10 Jahren

O.o

Also ein paar Millionen sind ja noch zu verkraften, aber über einer Milliarde?

Eine Idee, warum das nicht geht, hab ich aber auch nicht. Der einzige Gedanken-ANsatz ist Multi-Threading, das Stichwort Threadsicher steht in der Exception, vielleicht kollidiert da ja was.

Ansonsten schau doch mal in die InnerException, vielleicht steht da was.

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 10 Jahren

Das Zauberwort heißt "Big Data"

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo digi333,

Exakt dieses Objekt kann ich nicht serialisieren, jedoch andere Werte mit der gleichen Klasse funktionieren.

mit gleichgroßer Datenmenge oder ist die Datenmenge bei den Objekten, die funktionieren, (wesentlich) kleiner?

Greifst du während des Serialisierens von einem anderen Thread auf das Objekt bzw. Array zu?

herbivore

5.658 Beiträge seit 2006
vor 10 Jahren

Hi digi333,

Das Zauberwort heißt "Big Data"

Big Data bedeuted nicht, alle Daten gleichzeitig im Arbeitsspeicher zu haben, sondern möglichst effizient darauf zuzugreifen.

Christian

Weeks of programming can save you hours of planning

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 10 Jahren

Die Daten sind dort etwas kleiner und ich greife mit keinem anderen Thread auf das Objekt oder die Festplatte zu.

Mich wundert halt nur, dass ich die Daten im Speicher habe, aber diese nicht auf die Festplatte schreiben kann. Seltsam!

16.828 Beiträge seit 2008
vor 10 Jahren

Ich versteh nich, was das eine mit dem anderen zutun hat.
MrSparkles Einwand sagt eigentlich alles. Denn effizient ist Dein Vorhaben nicht; im Gegenteil: es ist dazu fehleranfällig.

5.658 Beiträge seit 2006
vor 10 Jahren

Hi digi333,

ich kann das ganze auch nicht nachvollziehen. Wie kommst du überhaupt darauf, daß es am Speicher liegt? Das Bild in deinem ersten Beitrag zeigt keine SystemOutOfMemoryException, sondern eine IndexOutOfRangeException. Woher die kommt, kann man ohne eine genauere Beschreibung von dir und ohne Code nicht sagen. Aber der StackTrace sollte dich auf die richtige Spur bringen. Siehe auch [Artikel] Debugger: Wie verwende ich den von Visual Studio?.

Christian

Weeks of programming can save you hours of planning

D
digi333 Themenstarter:in
290 Beiträge seit 2006
vor 10 Jahren

Ich versteh nich, was das eine mit dem anderen zutun hat.
MrSparkles Einwand sagt eigentlich alles. Denn effizient ist Dein Vorhaben nicht; im Gegenteil: es ist dazu fehleranfällig.

Nein... tut es nicht. Es ist jediglich ein nicht auf die Frage bezogener Hinweis.

Warum ich so viele Floats brauche hat tatsächlich mit einer komplizierten zueinander gewichtungsabhängigen Berechnung zu tun, bei der die Daten komplett und gleichzeitig verfügbar sein müssen. Die Ergebnisse möchte ich daher serialisieren um weitere Gewichtungen vornehmen zu können. Egal. Darüber solltet ihr euch aber keinen Kopf machen.

ich kann das ganze auch nicht nachvollziehen. Wie kommst du überhaupt darauf, daß es am Speicher liegt? Das Bild in deinem ersten Beitrag zeigt keine SystemOutOfMemoryException, sondern eine IndexOutOfRangeException. Woher die kommt, kann man ohne eine genauere Beschreibung von dir und ohne Code nicht sagen. Aber der StackTrace sollte dich auf die richtige Spur bringen. Siehe auch
>
.

Speicher? Wer sagte das es daran liegt. Es liegt im Speicher aber läßt sich nicht speichern auf Festplatte.

Danke für die Hinweise, aber bezogen auf die Fragen waren sie nicht. (Standardantwort in diesem Forum ist immer "such irgendwo in der HOW-TO-XYZ" oder "richtig Debuggen"... dann schreibt doch besser nichts.

16.828 Beiträge seit 2008
vor 10 Jahren

Du hast (wahrscheinlich) aufgrund Deiner uneffizienten Herangehensweise zu viele Daten, als dass der Standard-Serializer damit umgehen könnte.
Daher kommt es zur Exception und daher landet nichts auf der Platte - einfaches Spiel.

Das Problem kommt schließlich nicht bei der Datenhaltung im Speicher, sondern beim Serialisieren zustande. Entweder es ist eine nicht dokumentierte Exception des BinaryFormatters oder es passiert beim Zugriff auf Deine Matrix (Pcd) - wobei keiner weiß, was dahinter steckt..
Würde aber tippen, dass es eben beim Schreiben des Speichers passiert (oder vom Speicher auf die HDD).
Lösung: effizienteren Code, inkl. Caching / Splitting implementieren, der so eine Datenmenge eben handlen kann.

Du bist nebenbei ziemlich überheblich und frech, dafür, dass Du Hilfe verlangst / erwartest / erhoffst - das mal nebenbei und aus persönlicher Sicht, ohne, dass ich damit das ganze Forum (oder nur ein Teil) repräsentiere.

5.658 Beiträge seit 2006
vor 10 Jahren

Hi digi333,

Danke für die Hinweise, aber bezogen auf die Fragen waren sie nicht. Standardantwort in diesem Forum ist immer "such irgendwo in der HOW-TO-XYZ" oder "richtig Debuggen"... dann schreibt doch besser nichts.

Du bist derjenige, der Hilfe haben will, und wenn du uns keine Infos zu deinem Problem gibst, kann dir keiner weiterhelfen. Du hast eine Fehlermeldung und den StackTrace und du hast einen Debugger zur Verfügung. Damit sollte es kein Problem sein, die Fehlerursache zu finden. Solche Beiträge wie dieser oder der Hinweis auf das "Zauberwort" Big Data hilft niemanden hier, und dir am allerwenigsten.

Wir drehen uns hier im Kreis und solange du keine weiteren Infos geben willst, können wir dir nicht helfen. Siehe [Hinweis] Wie poste ich richtig?

Christian

Weeks of programming can save you hours of planning

S
145 Beiträge seit 2013
vor 10 Jahren

Sollte der standard BinaryFormatter wirklich probleme mit der größe haben, könntest du ja mal probe weiße die ISerializable Schnittstelle implementieren und das serialisieren selbst handeln.
Ev. die größeren Datenmengen dann dort drin komprimiert halten.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo zusammen,

für meinen Geschmack ist das "Mögliche E/A-Racebedingung" aus der Fehlermeldung zu kurz gekommen. (Ich habe es deshalb mal mit in den Titel geschrieben.

Neben der schieren Menge an Daten könnte also auch ein gleichzeitiger Zugriff aus mehreren Threads die Ursache sein.

Allerdings sind das alles reine Vermutungen. Ohne den Code und genauere Informationen kann man das unmöglich sagen.

herbivore

Hinweis von herbivore vor 10 Jahren

Deshalb ist es auch unsinnig eine Diskussion über die Art der Hilfe zu diskutieren. Erst recht ist es nicht zuzuführend, darüber zu diskutieren, welche Hilfe das Forum im allgemeinen leistet. Das hat in fachlichen Threads nichts zu suchen. Deshalb bitte ich euch alle, dies nicht fortzusetzen.