Ik ben bezig met een programma te maken die 2 tekst bestanden uitleest met de uitgelezen info wat berekeningen doet en dit dat weer weg schrijft naar een tekst bestand.
De 2 tekst bestanden bestaan uit 750 punten met elk 3 sub punten. Het idee is dat elk punt uit bestand 1 vermenigvuldigt wordt met elk punt uit bestand 2. Dus uiteindelijk heb je (750*3)^2 = 5062500 punten.
Bij ieder punt hoort een positie die voor het punt in het bestand staat.
voorbeeld van een punt:
Position 100 5000 5000, nselect = 1, pselect = 1
0.01592 -0.03905 0.85214 -0.47831 0.45320 -0.87230 -0.00262 -0.03277
-0.03445 0.02402 -0.07610 -0.96864 -0.57427 -0.78662 -0.02381 0.01892
-0.00326 -0.00437 -0.90877 -0.36031 -0.92687 -0.33179 -0.00414 -0.00437
ik pak eerst de positie van bestand 1 en dan zet ik de 3 punten in een array. Daarna loop ik bestand 2 door pak iedere keer de positie en daarna doe ik de berekeningen met de juiste punten.
Bij kleinere bestanden gaat het goed maar bij dit bestand heb ik het probleem dat het programma blijft hangen. Als ik in taakbeheer kijk gaat het een tijdje goed en wordt er ongeveer de helft van processor gebruikt. Maar daarna dropt het processor gebruik naar +/-4% en wordt er binnen no time 500mb geheugen gebruikt. Dit fluctueert dan een beetje maar er gebeurd verder niks meer.
Zoals ik het nu doe is
Heeft er iemand een idee hoe het efficiënter kan? Ik denk dat daar het probleem ligt aangezien het met kleinere bestanden wel werkt.
Of heeft iemand een ander idee waar het aan kan liggen?
Alvast bedankt voor jullie moeite.
De 2 tekst bestanden bestaan uit 750 punten met elk 3 sub punten. Het idee is dat elk punt uit bestand 1 vermenigvuldigt wordt met elk punt uit bestand 2. Dus uiteindelijk heb je (750*3)^2 = 5062500 punten.
Bij ieder punt hoort een positie die voor het punt in het bestand staat.
voorbeeld van een punt:
Position 100 5000 5000, nselect = 1, pselect = 1
0.01592 -0.03905 0.85214 -0.47831 0.45320 -0.87230 -0.00262 -0.03277
-0.03445 0.02402 -0.07610 -0.96864 -0.57427 -0.78662 -0.02381 0.01892
-0.00326 -0.00437 -0.90877 -0.36031 -0.92687 -0.33179 -0.00414 -0.00437
ik pak eerst de positie van bestand 1 en dan zet ik de 3 punten in een array. Daarna loop ik bestand 2 door pak iedere keer de positie en daarna doe ik de berekeningen met de juiste punten.
Bij kleinere bestanden gaat het goed maar bij dit bestand heb ik het probleem dat het programma blijft hangen. Als ik in taakbeheer kijk gaat het een tijdje goed en wordt er ongeveer de helft van processor gebruikt. Maar daarna dropt het processor gebruik naar +/-4% en wordt er binnen no time 500mb geheugen gebruikt. Dit fluctueert dan een beetje maar er gebeurd verder niks meer.
Zoals ik het nu doe is
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| StreamWriter sw = new StreamWriter(sHarmonicsFilePath); StreamReader srTuner1 = new StreamReader(sTuner1FilePath); StreamReader srTuner2 = new StreamReader(sTuner2FilePath); //While not end of file. while (!srTuner1.EndOfStream) { sInputTuner1 = srTuner1.ReadLine(); //als de positie gepakt is doe dit. if (bPosition1) { if (j == iNumberOfHarm) { sArrayTuner1[j] = sInputTuner1; while (!srTuner2.EndOfStream) { sInputTuner2 = srTuner2.ReadLine(); if (sFrequency1.Equals(sFrequency2)) { if (bPosition2) { //pak punt uit bestand 1 sSplit = sArrayTuner1[k].Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); //doe berekening sCascade = //berekening sCommandline = sCascade.Replace(',', '.'); sw.WriteLine(sCommandline); //zorg dat het volgende punt uit punten bestand 1 gebruikt wordt if (k == iNumberOfHarm) { bPosition2 = false; } k++; } //get position of tuner 2 if (sInputTuner2.Contains("Position")) { bPosition2 = true; k = 0; sSplit = sInputTuner2.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); sCommandline = sPosition + " Tuner2 L = " + sSplit[1] + " P1 = " + sSplit[2] + " P2 = " + sSplit[3].Replace(',', ' ').TrimEnd(); sw.WriteLine(sCommandline); } } } //reset the stream of tuner file 2 srTuner2.BaseStream.Position = 0; srTuner2.DiscardBufferedData(); bPosition1 = false; } else { sArrayTuner1[j] = sInputTuner1; j++; } } //pak positie van bestand 1 if (sInputTuner1.Contains("Position")) { j = 0; bPosition1 = true; sSplit = sInputTuner1.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); sPosition = " ! Position Tuner1 L = " + sSplit[1] + " P1 = " + sSplit[2] + " P2 = " + sSplit[3].Replace(',', ' ').TrimEnd(); } } //close streams srTuner1.Close(); srTuner2.Close(); sw.Close(); |
Heeft er iemand een idee hoe het efficiënter kan? Ik denk dat daar het probleem ligt aangezien het met kleinere bestanden wel werkt.
Of heeft iemand een ander idee waar het aan kan liggen?
Alvast bedankt voor jullie moeite.