If you are dealing with very large files you want to avoid GC pressure as much as possible as already mentioned. StringBuilder helps but you are still creating a StringBuilder instance. Some quick wins:
if (GettingTag)
{
//TagString = TagString + FP_FixString[FP_m];
Tag = Tag * 10 + ((byte)FP_FixString[FP_m] -48);
}// This reduces time by about 40%
//Tag = int.Parse(TagString);
The code below reduces the time even further (reduces to 50% of original):
int valueStart = 0;
while (!IsEndMark())
{
if (FP_FixString[FP_m].Equals('='))
{
GettingTag = false;
FP_m++;
valueStart = FP_m;
}
if (GettingTag)
{
//TagString = TagString + FP_FixString[FP_m];
Tag = Tag * 10 + ((byte)FP_FixString[FP_m] -48);
}
//else
//ValueString = ValueString + FP_FixString[FP_m];
FP_m++;
}
ValueString = FP_FixString.Substring(valueStart, FP_m - valueStart);
//Tag = int.Parse(TagString);
FP_m++; //Start of next Tag
I havent looked at the code further.