我通過TCP獲取大容量數據。數據中有2種類型的XML數據包。我需要儘快處理它。c#大量數據的代碼優化
<?xml version="1.0" encoding="UTF-8"?><xsi:Event> .... [dynamic length data] .... </xsi:Event>
和
<?xml version="1.0" encoding="UTF-8"?><ChannelHeartBeat xmlns="http://schema.broadsoft.com/xsi"/>
有時包沒有XML聲明。
這是舊代碼。
char c = (char)streamReader.Read();
sb.Append(c);
if(sb.ToString().EndsWith("</xsi:Event>",StringComparison.OrdinalIgnoreCase))
{
....
sb.Clear();
}
if(sb.ToString().EndsWith("<ChannelHeartBeat xmlns=\"http://schema.broadsoft.com/xsi\"/>", StringComparison.OrdinalIgnoreCase))
{
....
sb.Clear();
}
ToString()
在上述代碼中佔用了26%的CPU時間。
下面是優化代碼。它將性能提高了30%
char c = (char)streamReader.Read();
sb.Append(c);
n++;
if (n > 60)
{
if (c == '>')
{
if (n < 105)
{
string temp = sb.ToString();
if (temp.EndsWith("<ChannelHeartBeat xmlns=\"http://schema.broadsoft.com/xsi\"/>", StringComparison.OrdinalIgnoreCase))
{
sb.Clear();
n = 0;
}
}
if (n > 700)
{
string temp = sb.ToString();
if (temp.EndsWith("</xsi:Event>", StringComparison.OrdinalIgnoreCase))
{
sb.Clear();
n = 0;
}
}
}
}
}
ToString()
現在佔用8%的CPU時間。
我想進一步優化代碼。任何建議都是值得歡迎的。
在此先感謝。
可以並行代碼,以處理XML並行。 – Jepessen
您可以嘗試使用'StringBuilder.ToString(int startIndex,int length)'函數僅轉換部分字符串_(例如前105個字符或後50個字符)_。那麼操作應該至少快一點。 – Julo
顯示,你如何聲明並填充'sb' – Backs