通知程序的潜在内存泄漏
Potential Memory Leak with Notifiers
运行 桌面执行跟踪工具包,我注意到一些奇怪的行为。
跟踪内存分配指出了一些在我看来像是泄漏的奇怪行为。
跟踪和测试vi的图片在这里=>
获得通知程序后,将分配内存(一次或两次,视情况而定)并释放(完全不分配或释放一次),这意味着获得的每个通知程序都分配了一块内存,但未释放。这可能是我们的代码 运行 在很长一段时间内使用大量或获取和发布通知程序时出现错误的原因。这是已知行为并且分配的内存在跟踪范围之外自动释放,还是真正的低影响内存泄漏?
根据提供的示例很难判断是否真的存在泄漏,因为没有看到使用的按钮顺序(创建和销毁)。你有没有在中间发送数据?您是否一直在创建后立即发布它?你能post你测试的VI并描述你是如何测试它的吗?
如果通知程序创建一次,然后释放 - 则不会发生内存分配,请查看下图。
因此,在您的情况下,发生了一些其他事件,这些事件导致内存分配。而且,将代码实现为 FGV(或动作引擎)可以帮助消除此类问题,因为您可以确保引用只打开一次,然后就可以重复使用。当引用打开多次,但关闭次数较少时,会发生内存泄漏。
另一点 - LabVIEW 中缓冲区的动态分配是常见的事情,并且可能由于不同的原因而发生。但 LabVIEW 编译器足够智能,可以处理此类缓冲区,因此通常无需担心。分配缓冲区,然后刷新等。只需确保引用始终关闭 - 因为 LabVIEW 内存问题的主要原因是未释放引用。
运行 桌面执行跟踪工具包,我注意到一些奇怪的行为。
跟踪内存分配指出了一些在我看来像是泄漏的奇怪行为。
跟踪和测试vi的图片在这里=>
获得通知程序后,将分配内存(一次或两次,视情况而定)并释放(完全不分配或释放一次),这意味着获得的每个通知程序都分配了一块内存,但未释放。这可能是我们的代码 运行 在很长一段时间内使用大量或获取和发布通知程序时出现错误的原因。这是已知行为并且分配的内存在跟踪范围之外自动释放,还是真正的低影响内存泄漏?
根据提供的示例很难判断是否真的存在泄漏,因为没有看到使用的按钮顺序(创建和销毁)。你有没有在中间发送数据?您是否一直在创建后立即发布它?你能post你测试的VI并描述你是如何测试它的吗?
如果通知程序创建一次,然后释放 - 则不会发生内存分配,请查看下图。
因此,在您的情况下,发生了一些其他事件,这些事件导致内存分配。而且,将代码实现为 FGV(或动作引擎)可以帮助消除此类问题,因为您可以确保引用只打开一次,然后就可以重复使用。当引用打开多次,但关闭次数较少时,会发生内存泄漏。
另一点 - LabVIEW 中缓冲区的动态分配是常见的事情,并且可能由于不同的原因而发生。但 LabVIEW 编译器足够智能,可以处理此类缓冲区,因此通常无需担心。分配缓冲区,然后刷新等。只需确保引用始终关闭 - 因为 LabVIEW 内存问题的主要原因是未释放引用。