我有一個不允許在網站上的200多個單詞的列表。下面的string.Replace
方法需要約80ms。如果我將s < 1000
增加10.00倍至s < 10,000
,則延遲時間將增加至約834ms,增加10.43倍。我擔心這個函數的可伸縮性,特別是如果列表的大小增加。我被告知字符串是不可變的,並且text.Replace()
正在內存中創建200個新字符串。有沒有類似Stringbuilder
這個?優化字符串。替換方法
List<string> FilteredWords = new List<string>();
FilteredWords.Add("RED");
FilteredWords.Add("GREEN");
FilteredWords.Add("BLACK");
for (int i = 1; i < 200; i++)
{ FilteredWords.Add("STRING " + i.ToString()); }
string text = "";
//simulate a large dynamically generated html page
for (int s = 1; s < 1000; s++)
{ text += @"Lorem ipsum dolor sit amet, minim BLACK cetero cu nam.
No vix platonem sententiae, pro wisi congue graecis id, GREEN assum interesset in vix.
Eum tamquam RED pertinacia ex."; }
// This is the function I seek to optimize
foreach (string s in FilteredWords)
{ text = text.Replace(s, "[REMOVED]"); }
爲什麼這些詞不允許?有很多方式可以表達不被過濾而被阻止的單詞。 –
顯然,顏色是佔位符。關鍵詞,褻瀆,html標籤,腳本等需要被明顯地清除。我們有一個列表。請詳細說明「未經過濾被阻止」。 – Zerkey
我會嘗試使用正則表達式。當你有很長的表情時,它也會變得越來越慢,但它值得一試。另一種選擇是編寫自己的Replace方法 - 查看整個字符串,嘗試查找被阻止的單詞中的每個單詞 – Ondra