【问题标题】:VB6: Regular Expressions - Problem under Win7VB6:正则表达式——Win7下的问题
【发布时间】:2011-01-21 01:27:14
【问题描述】:

我有一个在 VB6 下使用正则表达式的小应用程序。 它在 XP 下完美运行,但在 Win7 下我遇到了很多问题。 有时,当传递给正则表达式函数的文本大于 20KB 时,它会冻结应用程序以及整个 Win7 系统:它变得非常慢,几乎完全冻结,并且仅在大约 30 秒后反应几秒钟并再次冻结。

奇怪的事情 - 如果我在任务管理器下终止 VB6 任务,整个系统仍然缓慢、冻结和不稳定。就像它在 100% cpu 负载下运行一样,虽然这很正常。似乎是一个消耗所有资源的系统问题,唯一有帮助的就是重新启动。

我已经用谷歌搜索了,但找不到任何东西。有人经历过同样的事情/知道解决方案吗?如果需要太长时间,是否至少有某种方法可以终止正则表达式函数?

【问题讨论】:

  • 在升级到 4GB RAM 时,我在旧 PC 上遇到了类似的行为。原来英特尔主板的 BIOS 有一个新版本。

标签: regex vb6


【解决方案1】:

应用程序是多线程的吗?您是否也将硬件从单核 CPU 升级到多核/多 CPU?

通常,当正则表达式失控时,它要么导致堆栈溢出,要么进入(显然)无限循环,但听起来你不会发生这种情况。您描述的症状听起来更像是死锁:多个执行线程争用同一资源。

报告了一些针对 Java 的正则表达式包的错误,这些错误结果与并发相关,与正则表达式无关本身。根本错误一直存在,但它无法在单核机器上显现,即使在名义上的多线程应用程序中也是如此。直到大量用户转向多核硬件时才被报道。

我并不是说 VB6 中存在像 Java 中那样的并发错误。更有可能在您的应用程序中。如果应用程序是多线程的,请尝试消除该方面,看看它有什么效果。如果不是,或者如果这没有帮助,我们将需要更多信息;你原来的问题没有太多可继续的。

【讨论】:

  • 嗨,我忘了提到我有一个英特尔四核,但 vb6-app 是单线程的(没有外部 dll 或多线程,只是普通的应用程序)。在 vb6/win7 中可能有什么需要调整的吗?谢谢
  • 我不知道调整。我主要是建议您不要仅仅因为正则表达式导致锁定的声誉而只关注正则表达式作为问题的原因。您可以尝试的另一件事是消除正则表达式,同时尽可能保持应用程序的结构相同。当然,一个好的分析器最有帮助,但我不知道 VB6 有什么可用的。
猜你喜欢
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
相关资源
最近更新 更多