Hi Friends,
the question sounds simple but I have to elaborate more what I want.
In my application I read a file and set all the lines in a
LIST<STRING> _allFileLines
object.
I now iterate with a for each over the collection to read all lines and parse the values to a
float[] fieldsPerLine
. I get 4 float values per array. That's OK.
After that I set the values in an object called
FileItemValues
That object holds 13 float values. The 4 in the array and 9 calculated values based on the first 4.
Each
FileItemValues
is added to a
LIST<FileItemValues>
.
Since each file holds minimal 30,000 records, it takes around 30 seconds to process(iterating, calculating, adding to new object and determine the Maximum values for each of the 13 properties in the
LIST<FileItemValues>
How can this be done quicker with LINQ where the steps are:
- From
List<String>
to
List<FileItemValues>
for only the first 4 values found in
List<String>
- calculate the 9 other fields in the
List<FileItemValues>
- Determine maximum values for each property in
List<FileItemValues>
set in a
FileItemValues
object.
Regards
ps:
current iterating from list<string> to float[]:
foreach (var fileLine in _allFileLines)
{
float[] fieldsPerLine = fileLine.Trim().Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries).Select(float.Parse).ToArray();
At this moment the next part is slowing me down:
foreach (var fileLine in resultProef)
{
FileItemValues currentLineValues = new FileItemValues();
currentLineValues.MilliSecs = fileLine[0];
currentLineValues.PosX = fileLine[1];
currentLineValues.PosY = fileLine[2];
currentLineValues.PosYerk = fileLine[3];
currentLineValues.MutatieSnelheidX = _positions.Count > 0 ? (currentLineValues.PosX - _positions[_positions.Count - 1].PosX) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieSnelheidY = _positions.Count > 0 ? (currentLineValues.PosY - _positions[_positions.Count - 1].PosY) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieSnelheidRotatie = _positions.Count > 0 ? (currentLineValues.PosYerk - _positions[_positions.Count - 1].PosYerk) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieAcceleratieX = _positions.Count > 0 ? (currentLineValues.MutatieSnelheidX - _positions[_positions.Count - 1].MutatieSnelheidX) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieAcceleratieY = _positions.Count > 0 ? (currentLineValues.MutatieSnelheidY - _positions[_positions.Count - 1].MutatieSnelheidY) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieAcceleratieRotatie = _positions.Count > 0 ? (currentLineValues.MutatieSnelheidRotatie - _positions[_positions.Count - 1].MutatieSnelheidRotatie) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieJerkX = _positions.Count > 0 ? (currentLineValues.MutatieAcceleratieX - _positions[_positions.Count - 1].MutatieAcceleratieX) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieJerkY = _positions.Count > 0 ? (currentLineValues.MutatieAcceleratieY - _positions[_positions.Count - 1].MutatieAcceleratieY) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
currentLineValues.MutatieJerkRotatie = _positions.Count > 0 ? (currentLineValues.MutatieAcceleratieRotatie - _positions[_positions.Count - 1].MutatieAcceleratieRotatie) / (currentLineValues.MilliSecs - _positions[_positions.Count - 1].MilliSecs) : 0;
_positions.Add(currentLineValues);
}