我一直在努力扩展网站的搜索栏功能,以提供更多动态搜索结果。当我在本地计算机上使用调试器进行测试,使用测试标签和搜索时,它可以完美运行。但是,当我尝试构建它并将其发布到生产环境时,它将无法正常工作。我已经逐行进行了审查,但似乎找不到代码中的问题。
它的工作方式是针对服务器上的文件,它查看“类别”和“标签”值并将它们附加到列表中。例如,我有一个名为“年度结果”的文件。 “年度结果”文件的类别为“财务”,标签为“结果;金钱;”。我还有一个名为“ SynonymsDictionary”的文件,是的,它只是一个同义词库,位于路径TagSynonynmsPath
上。在该文件中,它包含这样的列表:
Results: Result;End;Close;
Financials: Finance;Financial;
Money: Moolah;Cash;Dollars;
...
Dictionary<string, string> synonymsDictionary = new JavaScriptSerializer().Deserialize<Dictionary<string, string>>(File.ReadAllText(Server.MapPath(".") + urlInfo.TagSynonymsPath));
/* Declare the tagList list that will store all of our populated tags */
List<string> tagList = new List<string>();
/* Add file categories to tagList */
foreach(string catTag in file.Value["Categories"].Split(';'))
{
tagList.Add(catTag.ToLower().Trim());
}
/* Add file tags to tagList */
foreach(string fileTag in file.Value["Tags"].Split(';'))
{
tagList.Add(fileTag.ToLower().Trim());
}
/* Loop through the newly populated category and tag objects to see if there are synonyms */
for (int i = tagList.Count - 1; i >= 0; i--)
{
/* Declare & initialize a new string where we can store our synonyms */
string synTags = string.Empty;
if (synonymsDictionary.TryGetValue(tagList[i], out synTags))
{
/* If a string of synonyms is found, split the string up into individual objects and add to tagList */
foreach(string cleanedTag in synTags.Split(','))
{
tagList.Add(cleanedTag.ToLower().Trim());
}
} else {
/* If there are no synonyms, test the next object in the list */
continue;
}
}
/* Convert our list into a string of tags, delimited with a ", " */
file.Value["Tags"] = String.Join(", ", tagList.ToArray());
代码应首先在tagList
中存储我们的类别和标签,以便列表中应包含Financials,Results,Money
。然后,它查看SynonymsDictionary文件中的KeyValuePairs,并看到每个标记都有一个同义词,因此应导致以下结果:
Financials,Results,Money,Finance,Financial,Result,End,Close,Moolah,Cash,Dollars
。结果与在本地进行测试时的结果完全相同,但是当我在实际站点上构建和发布解决方案时,结果就坏了。当我在本地对其进行测试时,同义词的数量要少于实时站点上的同义词。为什么此代码无法实时运行的任何想法?
答案 0 :(得分:0)
在本地对一个小的数据集进行测试,然后对一个大的数据集进行生产运行,总是容易使您陷入内存不足错误和超时等问题。如果无法捕获到实际错误,我们无法告诉您问题出在哪里,但是您可以通过在本地运行以下命令来进行攻击: