我有一個項目,我必須寫一個高效的代碼,這將盡可能快地工作,但我缺乏這方面的知識......如何以更高效的方式編寫排序?
所以我有一個asp.net(MVC)項目使用實體框架,以及我必須使用Web服務來獲取有關它的細節的信息。 首先我向Web服務發出請求,並用一個長字符串響應,我必須在字符串列表中解析以進行進一步的活動。
我解析這個字符串是這樣的:
string resultString;
char[] delimiterChars = { ',', ':', '"', '}', '{' };
List<string> words = resultString.Split(delimiterChars).ToList();
在這裏,我有表有很多行,其中有信息和大量的垃圾行,這看起來是這樣的:
我決定從垃圾信息中清除此列表,以免在其他方法中使用此列表,而不是使用ifs等檢查此行:
for (int i = words.Count - 1; i >= 0; i--)
{
if (words[i] == "" || words[i] == "data" || words[i] == "array") words.RemoveAt(i);
}
之後,我得到了清單,但每個小數如價格,尺寸等分開,
,所以如果我有價格21,55在我的列表中,它現在看起來像2個元素21和55.我不能只是從分隔符中刪除,
,因爲我從web服務獲得的響應主要是通過放置,
來分隔信息。
所以決定膠十進制數回(在此之前塊列表元素看起來像:1)attrValue 2)21 3)55和後等:1)attrValue 2)21.55):
for (int i = 0; i < words.Count(); i++)
{
if (words[i] == "attrValue")
{
try
{
var seconPartInt = Int32.Parse(words[i + 2]);
words[i + 1] += "." + words[i + 2];
}
catch { }
}
if (words[i].Contains("\\/")) words[i].Replace("\\/", "/");
}
每事情是好的,列表排序,小數點被收集,但速度減慢了30%。經過一些測試與秒錶和評論塊代碼變得清楚,上面的代碼減慢整個程序太多...
總結: 我不能使用慢代碼,同時不知道如何讓它工作得更快。可能是問題是,我將字符串轉換爲int,以檢查列表中的下一個元素是否是第二部分,如果我的編號。
我該如何優化我的代碼?
在我看來,您正在從Web服務獲取CSV文件。你知道這個文件是否每次都是一樣的嗎?如果是這樣,我會考慮用CSV解析器序列化返回。這會使我更容易管理對象,並且您可以選擇忽略默認情況下不需要的內容。 –
爲什麼你在處理字符串?您可以將字符串解析爲對象並處理對象。 – BWA
如果您繼續使用'String.Split',則更容易擺脫空字符串的方法是使用帶有'StringSplitOptions'參數的版本。你應該使用'StringSplitOptions.RemoveEmptyEntries'選項。 – hatchet