C#平行。冻结

发布于 2025-02-13 17:06:57 字数 2256 浏览 0 评论 0原文

我有一个大量的文件列表,需要阅读,还检查了contant是否包含其他列表中的内容。这需要一些性能,所以我认为我可以通过平行的方向运行它。不知何故,它会不时卡住,我不能怪异。

    Math.Max(2, Environment.ProcessorCount - 2);

            Parallel.ForEach(allPrFiles, allPrFile =>
            {
                using (StreamReader sr = new StreamReader(allPrFile))
                {
                    string line;

                    while ((line = sr.ReadLine()) != null)
                    {
                        line = sr.ReadLine(); // 2nd Line
                        if (areaDataCRCs.Contains(line))
                        {
                            Dbg.DebugTxt(allPrFile);
                            areaDataCRCs.Remove(line);

                            if (allPrFile.IndexOf(".prb") > -1)
                            {
                                if (!filesToMove.Contains(allPrFile))
                                    if (!String.IsNullOrEmpty(allPrFile))
                                        filesToMove.Add(allPrFile);
                                line = sr.ReadLine();
                                line = line.Replace("buildingfile", string.Empty);
                                line = line.Replace("dungeonblockfile", string.Empty);
                                line = line.Replace("\"", string.Empty);
                                line = line.Trim();
                                if (String.IsNullOrEmpty(line))
                                    Dbg.DebugTxt("NO GR2 FILE FOUND - " + allPrFile);
                                else
                                {
                                    if (!gr2Files.Contains(line))
                                        if (!String.IsNullOrEmpty(line))
                                            gr2Files.Add(line);
                                    if (!filesToMove.Contains(line))
                                        if (!String.IsNullOrEmpty(line))
                                            filesToMove.Add(line);
#if DEBUG
                                    Dbg.DebugTxt(line);
#endif
                                }
                                break;
                            }
                   }

          }

});

我错过了什么吗?我是C#的新手,所以请不要努力:) 并且还忽略切割字符串的部分。那只是为了测试目的

i have a huge list of file which needed to be read and also checked if the contant contains somthing from another list. This takes a bit of performance so i thought i could run it with a parallel.foreach. Somehow it get stuck from time to time and i cant figuere it out.

    Math.Max(2, Environment.ProcessorCount - 2);

            Parallel.ForEach(allPrFiles, allPrFile =>
            {
                using (StreamReader sr = new StreamReader(allPrFile))
                {
                    string line;

                    while ((line = sr.ReadLine()) != null)
                    {
                        line = sr.ReadLine(); // 2nd Line
                        if (areaDataCRCs.Contains(line))
                        {
                            Dbg.DebugTxt(allPrFile);
                            areaDataCRCs.Remove(line);

                            if (allPrFile.IndexOf(".prb") > -1)
                            {
                                if (!filesToMove.Contains(allPrFile))
                                    if (!String.IsNullOrEmpty(allPrFile))
                                        filesToMove.Add(allPrFile);
                                line = sr.ReadLine();
                                line = line.Replace("buildingfile", string.Empty);
                                line = line.Replace("dungeonblockfile", string.Empty);
                                line = line.Replace("\"", string.Empty);
                                line = line.Trim();
                                if (String.IsNullOrEmpty(line))
                                    Dbg.DebugTxt("NO GR2 FILE FOUND - " + allPrFile);
                                else
                                {
                                    if (!gr2Files.Contains(line))
                                        if (!String.IsNullOrEmpty(line))
                                            gr2Files.Add(line);
                                    if (!filesToMove.Contains(line))
                                        if (!String.IsNullOrEmpty(line))
                                            filesToMove.Add(line);
#if DEBUG
                                    Dbg.DebugTxt(line);
#endif
                                }
                                break;
                            }
                   }

          }

});

Did I missed something? Im pretty new to C# so please dont be to hard :)
And also ignore the part of cutting the string. Thats just for test purpose

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文