【问题标题】:C# variable gets corrupted on one specific PC but works fine on all other [closed]C# 变量在一台特定的 PC 上被损坏,但在所有其他 PC 上工作正常[关闭]
【发布时间】:2013-09-05 13:23:03
【问题描述】:

我有一个用 C# 编写的工具,它的可执行文件由许多用户共享。

在某些 PC 上,我发现 - 特定变量被清除(即列表被自己清除);这会导致工具抛出异常。

相同的工具在其他 PC 上的所有条件下都能正常工作。

如果我将这几台电脑与所有其他电脑进行比较,在 RAM、操作系统、任务负载等方面没有区别。 工具及其依赖项以及使用它的步骤也都相同。

我对这种奇怪的行为感到困惑。对我来说,其他问题是受影响的 PC,他们的用户位于不同的国家。所以我不能手动检查PC参数或者可以调试。我依赖于我得到的日志。

你们中的任何人都遇到过类似的问题吗?

你能告诉我两台不同的电脑有相同的配置怎么会有不同的行为吗?环境变量、系统参数等是否有依赖关系

问候, 萨钦

【问题讨论】:

  • 您应该检查用户权限是否不同
  • 处理器架构怎么样?您是否检查了代码中清除 List 的每个地方?你可以用ReadOnlyCollection 替换它,看看是否有什么东西正在清除不应该的列表?此外,“特定变量被清除” - 哪个变量,在什么情况下?没有任何源代码很难诊断。
  • 投票结束,因为在这个详细程度,任何答案都只能是推测性的。提供一些代码。

标签: c# memory corruption


【解决方案1】:

没有人可以用您提供的有限信息来回答您的问题。不过我可以给你一些建议,你可以如何解决这个问题。

  1. 添加调试日志 - 将日志添加到您的每个方法以及参数信息。您的日志越详细,您就越容易找到错误。
  2. 添加错误处理程序以通过电子邮件发送带有整个堆栈跟踪的异常 - 您能否添加此功能,因为这将消除手动收集日志的麻烦。此错误处理程序还可以附加整个日志,以便您在电子邮件中获得完整的上下文。
  3. 分析日志找出哪个函数在哪个参数上失败
  4. 从您的程序中删除错误

【讨论】:

    【解决方案2】:

    可能是线程问题?有时,具有不同可用内核数量的机器对竞争条件的响应不同。

    【讨论】:

      【解决方案3】:

      任何设备都可能受到随机内存问题存储不一致的影响,并且在 Windows 机器中,臭名昭著的 WINDOWS REGISTRY 可以保存许多不同的值,这些值会影响程序的执行方式.

      我建议您在运行的机器上运行任何可靠的工具来执行内存诊断,并将其与不运行的机器进行比较

      改进工具中的逻辑,检查变量的内容并执行 try/catch 操作以尝试检测根本原因并记录这些错误以诊断正在发生的事情

      【讨论】:

        【解决方案4】:

        它认为您应该在区域/文化设置上搜索问题。这行 “其他问题对我来说是受影响的 PC 并且他们的用户位于 不同的国家。” 敲响了一个警钟,该变量与双字符串和反之亦然。该列表可能会被解析异常中断。

        如果您在开始时显示/记录Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator 会怎样。

        那么你应该用文化信息来解析。

        例如:

        CultureInfo usCultureInfo = new CultureInfo("en-US");
        
        double result;
        
        if (!double.TryParse("0.231312", NumberStyles.Float, usCultureInfo, out result))
        {
        }
        

        另一个问题可能是,是否安装了正确的 .NET 版本(完整/客户端配置文件)

        【讨论】:

          【解决方案5】:

          感谢您的宝贵建议和提示。

          由于 CultureInfo 不同而发生错误。 该可执行文件还在读取 XLS 文件以获取一些数据。 由于文化信息不匹配,XLS 读取不成功,进而损坏了一些变量集。

          为了解决这个问题,我有两个选择: 1.安装MS office语言包 2.改变程序中的文化信息如下: CultureInfo = new CultureInfo("en-US");

          @Mr.杰伦·范·朗根 特别感谢您!

          问候, 萨钦

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-07
            • 2018-08-11
            • 1970-01-01
            相关资源
            最近更新 更多