0

我有这个代码

n_userobject    inv_userobject[]

For i = 1 to dw_1.Rowcount()
inv_userobject[i] = create n_userobject
 .
 .
 .
NEXT 

dw_1.rowcount()仅返回 210 行。太奇怪了,在 170 以上的范围内,应用程序停止并崩溃inv_userobject[i] = create n_userobject。我的问题是,使用数组的数组或用户对象声明是否有任何限制?我已经尝试在循环之后销毁它,以检查这是否是一个可能的解决方案,但它仍然崩溃。或者我怎么能以某种方式refresh获得用户对象?或者有没有人遇到这种情况?

感谢你的帮助。

4

4 回答 4

2

首先,你的记忆问题。您绝对没有遇到数组限制。如果我猜测一下,n_userobject 中的一个实例变量没有被正确清理(即指向一个在父类被销毁时没有被销毁的类)或指向一个类似没有的类t 清理自己。如果您有 PB Enterprise,我会使用较小的循环进行分析跟踪,并查看正在收集的垃圾(有一个名为CDMatch的实用程序确实有助于此过程)。

其次,让我们面对现实吧,您这样做只是为了避免编写重置方法。即使你获得了这个功能,它也永远不会像编写自己的重置方法并再次重用同一个实例那样高效。是的,当实例变量列表更改或默认值更改时,这是您必须维护的另一种方法,但您很容易在性能上恢复。

祝你好运,

特里。

于 2011-07-04T15:12:31.360 回答
1

我假设您面临的崩溃是在 PBVM 级别,而不是常规的 PB 异常(您可以在代码中捕获)。如果我错了,请添加异常详细信息。

170-210 次迭代的循环确实不是一个大循环。但是,循环内的崩溃通常是资源耗尽的结果。我们通常在长循环中做的是偶尔调用GarbageCollect()。它应该多久调用一次取决于你的代码做什么——频繁使用它可以减少内存的使用,但它会减慢运行速度。阅读本文了解更多信息。

如果这没有帮助,请确保错误不是来自某些非 PB 代码(导入的 DLL 左右)。您可以在崩溃期间检查堆栈跟踪以查看异常的来源。

最后,如果您得到 Sybase(或当地代表)的支持,您可以向他们发送故障转储。他们可以分析它,看看它是否是 PB 中的一个错误,如果是,让你知道它何时(或将要)修复。

于 2011-07-03T14:00:46.190 回答
0

我通常对 DataWindow 所做的是创建一个对象,该对象处理一行中的数据并为每一行调用它。

于 2011-07-01T18:36:33.830 回答
0

我对此的唯一建议是从 for (For i = 1 to dw_1.Rowcount()) 中删除行数,这将导致代码在每次使用行时重新计算行数。将计数放入变量中,然后使用该变量。它应该运行得更好一些并且更容易调试。

于 2011-11-16T16:57:26.193 回答