我正在搜索網絡文件中的特定文本。用戶輸入文字。有大約850個文件需要搜索。下面的代碼完成了我想要的,但需要大約11-13秒。此代碼位於我使用$ .ajax GET從網頁調用的Web服務中。有沒有一種方法可以提高代碼的搜索速度?或者我應該看看其他領域而不是我的代碼?搜索文件內容的最快方法
由於文件的創建方式(他們使用MS Word創建網絡文件......另一場戰鬥),我在文檔中進行了替換,它改進了我的搜索結果。
var searchResults = new StringBuilder();
var parameters = searchParameters.Split('|');
var searchOnCompletePhrase = bool.Parse(parameters[1]);
var completePhrasePattern = @"\b(?:" + Regex.Escape(parameters[0].ToString()) + @")\b";
var files = Directory.GetFiles(path, "*.htm");
if (searchOnCompletePhrase && searchPhrase.Length > 1)
{
foreach (var currentFile in files)
{
document.Load(currentFile);
contents = document.DocumentNode.InnerText.Replace("\r", string.Empty)
.Replace("\n", string.Empty)
.Replace(" ", string.Empty)
.Replace(" ", " ");
if (contents.ToLower().IndexOf(searchPhrase.ToLower()) > -1)
{
searchResults.AppendLine(currentFile);
searchResults.Append("|");
}
}
}
else
{
var keywords = parameters[0].Split(' ');
foreach (var currentFile in files)
{
document.Load(currentFile);
contents = document.DocumentNode.InnerText.Replace("\r", string.Empty)
.Replace("\n", string.Empty)
.Replace(" ", string.Empty)
.Replace(" ", " ");
var found = true;
foreach (var word in keywords)
{
if (!SearchCurrentWord(word.ToString()))
{
found = false;
break;
}
}
if (found)
{
searchResults.AppendLine(currentFile);
searchResults.Append("|");
}
}
}
您需要剖析您的代碼以瞭解在哪裏花費時間。有一個非常好的機會,瘋狂浪費的代碼在帖子中顯示大量未使用的字符串並不重要,因爲它仍然需要花費同樣的時間來閱讀文件。 (事實上,服務器不支持Word,所以可能根本無法工作) –