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

System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)
digi333
myCSharp.de - Member



Dabei seit:
Beiträge: 302

Themenstarter:

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

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 10072

beantworten | zitieren | melden

Du hast da jetzt nicht allen ernstes ein Array mit 1 Milliarde Floats drin?
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1455
Herkunft: Düsseldorf

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 302

Themenstarter:

beantworten | zitieren | melden

Das Zauberwort heißt "Big Data"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo digi333,
Zitat
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
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi digi333,
Zitat von 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
private Nachricht | Beiträge des Benutzers
digi333
myCSharp.de - Member



Dabei seit:
Beiträge: 302

Themenstarter:

beantworten | zitieren | melden

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

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

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

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

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



Dabei seit:
Beiträge: 302

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt
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.
Zitat von MrSparkle
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?.

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

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

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

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

Hi digi333,
Zitat von 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
private Nachricht | Beiträge des Benutzers
Spyke
myCSharp.de - Member



Dabei seit:
Beiträge: 146

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spyke am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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

Moderationshinweis von herbivore (21.11.2013 - 19:27:11):

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.