C#代码适用于本地版本,但不适用于实时生产版本

时间:2019-06-19 14:54:02

标签: c# asp.net

我一直在努力扩展网站的搜索栏功能,以提供更多动态搜索结果。当我在本地计算机上使用调试器进行测试,使用测试标签和搜索时,它可以完美运行。但是,当我尝试构建它并将其发布到生产环境时,它将无法正常工作。我已经逐行进行了审查,但似乎找不到代码中的问题。

它的工作方式是针对服务器上的文件,它查看“类别”和“标签”值并将它们附加到列表中。例如,我有一个名为“年度结果”的文件。 “年度结果”文件的类别为“财务”,标签为“结果;金钱;”。我还有一个名为“ 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。结果与在本地进行测试时的结果完全相同,但是当我在实际站点上构建和发布解决方案时,结果就坏了。当我在本地对其进行测试时,同义词的数量要少于实时站点上的同义词。为什么此代码无法实时运行的任何想法?

1 个答案:

答案 0 :(得分:0)

在本地对一个小的数据集进行测试,然后对一个大的数据集进行生产运行,总是容易使您陷入内存不足错误和超时等问题。如果无法捕获到实际错误,我们无法告诉您问题出在哪里,但是您可以通过在本地运行以下命令来进行攻击:

  • 生产数据的忠实副本
  • 足够在本节代码中进行记录,即使应用程序池崩溃,您也可以获得有用的线索。