我需要儘可能快地解析FIX消息。這是一種解析FIX格式的大字符串的有效方法嗎?
我的方法如下。我保留了FP_FixString中的FixString的引用,然後按順序獲取Tag值,因爲我需要它們。
修復信息大約4K字符和約100重複組3我需要提取標籤。
我是否儘可能有效地做到這一點?從字符串構建和解析角度來看?
pubic FixParser
{
string FP_FixString;
int FP_m;
int FP_Lastm;
public void Go()
{
using (StreamReader reader = new StreamReader(new GZipStream(File.OpenRead(@"L:\Logs\FIX.4.2-D.messages.current.log.20140512T.gz"), CompressionMode.Decompress)))
{
string line = "";
while ((line = reader.ReadLine()) != null)
{
InitiateFixParse(ref line);
string Symbol;
if (!GetTagString(55, out Symbol))
return;
//DO ALL OTHER PROCESSING OF TAGS HERE
}
}
public void InitiateFixParse(ref string fixString)
{
FP_Lastm = fixString.Length - 1;
FP_FixString = fixString;
FP_m = 0;
}
public bool IsEndMark()
{
if (FP_m>=FP_Lastm || FP_FixString[FP_m].Equals('\x01'))
return true;
return false;
}
public bool NextTag(out int Tag, out string ValueString)
{
Tag = 0;
ValueString = "";
if(FP_m>=FP_Lastm)
return false;
string TagString = "";
bool GettingTag=true;
while (!IsEndMark())
{
if (FP_FixString[FP_m].Equals('='))
{
GettingTag = false;
FP_m++;
}
if(GettingTag)
TagString = TagString + FP_FixString[FP_m];
else
ValueString = ValueString + FP_FixString[FP_m];
FP_m++;
}
Tag=int.Parse(TagString);
FP_m++; //Start of next Tag
return true;
}
public bool GetTagString(int Tag, out string ValueString)
{
//bool FountIt = false;
int aTag;
string aValueString;
while (NextTag(out aTag, out aValueString))
{
if (aTag == Tag)
{
ValueString = aValueString;
return true;
}
}
ValueString = "";
return false;
}
}
你有沒有剖析你的代碼,並消除了剖析器指出的瓶頸? – DumbCoder