VB6应用程序消失得无影无踪:PCode和Native Code之间的切换会有所不同吗?

时间:2009-03-05 17:51:51

标签: compiler-construction vb6 stability

我知道这个主题在新闻组中已经完成,并且有非洲的论坛帖子 - 但是我想让你选择堆栈溢出专家:)

我们的VB6应用程序偶尔会在用户执行操作时消失,并且不会出现任何错误,也不会出现在PC的错误日志中!

我想知道是否有人之前在VB6上听说过这个以及你做了什么来修复它?

我认为将原生代码中的所有代码更改为pcode可能会提供更高的稳定性?


额外信息:

  • 我们正在使用Mdac 2.8
  • True DB Grid 6.0e

编辑中添加了注释:

  • 我们的应用程序非常庞大,有113个独立组件和120MB编译大小(没有嵌入图片或任何东西)
  • 我们的表示层动态创建对象,所以一切都是后期绑定。
  • 我并不真正关心VB6应用程序的本地性能,因为据我所知,它并没有真正做任何严肃的处理,因此我们的Oracle数据库在数据中心的80英里处完全陷入了性能瓶颈300个用户 - 噩梦!

1 个答案:

答案 0 :(得分:1)

它有所不同。但不赞成其中一个。因为两种方法不完全相同,所以它们可以在边缘情况下产生不同的结果。

另外要理解我所描述的问题是编译器问题而不是程序员的错误。所以你想要确保这是问题所在。我们通过比较最新已知良好版本的变化来检查这一点。

我们遇到的问题是,对于我们的一些大型项目,代码中的小变化将导致错误(或应用程序消失)。使用二进制文件时会发生这种情况。

当出现这种罕见的情况时,修复的唯一方法是重新排序代码行或插入虚拟行,如i = i。任何会迫使编译器发出不同的程序集或pcode序列的东西。然后问题就消失了。

有一些实例,我们这样做,成功编译,更改它,并成功编译回来。我们认为在这种情况下发生的情况是注册表的变化足以强制发出稍微不同的二进制/ pcode集。

您可能还想清理注册表和本地临时文件夹。

我的经验是,每1000到500个具有多个引用的大型项目的编译可能会发生这种情况。

作为个人评论,当这种情况发生时,原因和解决方案似乎毫无意义,并且让我想要打破伏都教玩偶并做一场雨舞。