Hallo Leute
Ich habe in C# eine Datei mit 1,7 Millionen Zeilen a 45 Zeichen Länge eingelesen.
Danach selektiere ich bestimmte Zeilen und gruppiere sie.
Danach bleiben ca 1,5 Millionen Zeilen übrig.
Wenn ich aber beim where Teil eine Methode zur Prüfsummenberechnung aufrufe bleiben immer nur 69.998 Zeilen übrig.
Die Methode selber sollte höchstens 100.000 Einträge abweisen und wenn ich von Hand fehlende Einträge nachprüfe, werden die akzeptiert.
Auch wenn ich die Datei über eine for-Schleife durchlaufen lassen, lässt die Methode nur ca 100.000 Einträge weg.
Daher innerhalb des Linq ergibt die Methode Fehler.
Warum?
Quelldatei:
1888888888 BLAblablsaBLAblablsblablablablalba
2888888888 BLAblablsaBLAblablsblablablablalba
3888888888 BLAblablsaBLAblablsblablablablalba
4888888888 BLAblablsaBLAblablsblablablablalba
... ca. 1,7 Millionen mal
Quellcode:
string[] q1 = File.ReadAllLines("Quelldatei.txt");
var v1 = from z in q1
select new
{
zahl = z.Substring(1, 10).Trim(),
text = z.Substring(11).Trim()
};
var v11 = from s in v1
where
isBerechnungOk(s.zahl, 10) && //Hier Fehler!
s.zahl.Length == 10
orderby s.zahl
group s by s.zahl into sGrp
select new
{
zahl = sGrp.Key,
text = sGrp.First().text
} ;
//Ohne isBerechnungOk = 1550314
//Mit isBerechnungOk = 69998
Console.WriteLine("zeilen: " + v11.ToList().Count.ToString());
Console.ReadKey();
Wenn benötigt, kann ich die Methode posten, ist aber etwas länger. Die Methode verwendet nur int,string datentypen und forschleifen mit % Berechnung.
Hat jemand eine Ahnung warum? Gibt es in Linq einen Stacküberlauf, kann ich für Linq einen Wert erhöhen?
Grüße Cornflake
Bist du sicher, dass der Fehler nicht an der Gruppierung liegt.
Ist s.zahl wirklich jeweils eindeutig in der Datei?
Wäre es dann nicht besser erst zu gruppieren und dann die Berechnungsabfrage auf s.zahl durchzuführen?
Und auch
isBerechnungOk(s.zahl, 10) &&
s.zahl.Length == 10
würde ich umdrehen, denn die Berechnung wird sicherlich länger dauern als die Längenabfrage.
Edit: witte - ja, das wird es sein...
8o 8o 8o
Peinlich. Ich glaube witte du hast Recht. Das habe ich voll übersehen und würde alles erklären. Daher auch keine Fehlermeldungen etc.
Werde ich gleich mal testen.
@cat: Danke für den Verbesserungstipp, werde ich auch mit einfließen lassen.