0

我有一个 VB6 应用程序,我试图以不同的方式注销。我所拥有的是注册表(现有)中的一个标志,它说明应用程序是否设置为调试模式以便它注销。

在我的代码中,我有很多 if 语句来检查这是否是真的。这意味着有很多处理时间来检查语句是否为真,这可能并不多,但因为它经常这样做,所以我想减少开销。

代码中充满了这样的语句

If isDebug = True Then
    LogMessage("Log what is happening")
End If

所以我正在寻找的是一种更好的方法来做到这一点。我知道我可以在 Project Properties -> Make 中设置调试模式,但这需要在构建 .exe 之前设置,并且我希望能够通过注册表项在生产中设置它。

4

4 回答 4

3

考虑使用命令行参数来设置调试模式。我曾经这样做过。

Dim sCommandLine() As String
sCommandLine = Split(Command$)
For I = 0 To UBound(sCommandLine)
    ' do something with each arg
Next I

您还可以在 IDE 中保留命令行参数,以便在调试时始终拥有它们。在 IDE 外部运行时,使用其中的参数创建已编译应用程序的快捷方式。

于 2013-04-16T18:12:21.360 回答
1

在我的很多代码中,我所做的事情几乎与您的想法相同。添加这个:

Sub LogDebug(ByVal strMsg As String)
    If (isDebug) Then
        LogMessage(strMsg)
    End If
End Sub

然后只需调用LogDebug您的主程序主体,或者LogMessage如果您总是想要记录它,则直接调用,无论调试标志如何。

我假设isDebug这里是一个布尔值。如果是函数调用,您应该只创建一个在代码开头设置的全局标志,并检查它而不是一遍又一遍地查看注册表。我不认为检查布尔值是一个很大的处理负载,是吗?

于 2013-04-16T14:55:40.603 回答
0

如果设置了运行时标志,您想调用一个函数。我能看到的唯一可以更快的是:

If isDebug Then
    LogMessage("Log what is happening")
End If

但我怀疑这两者都会导致性能问题。大多数日志框架都会推广这样的代码,甚至将标志/日志级别作为函数的参数。只要确保您没有在条件语句之外不必要地计算日志消息的其他地方。

您可以评估为什么需要记录以及生成的日志是否对此有效。

如果您正在寻找可以使用 VB 错误处理捕获的问题,请考虑使用像HuntERR31这样的良好错误处理库。有了它,您可以选择仅记录错误而不是您现在正在执行的调试消息。即使您不使用该库,文档对 VB 中的错误处理也有很好的描述。

于 2013-04-16T14:41:23.250 回答
0

另一个答案仍然:

将您的注册表标志读入您的应用程序,使其成为基于会话的事物(即,当您关闭并重新启动应用程序时,将再次检查该标志 - 每次测试都检查注册表没有意义)。

然后(根据 Tom 的帖子)将值分配给全局变量并对其进行测试 - 比函数快得多。

为了加快日志记录,您可能需要考虑在应用程序中确定字符串缓冲区的大小,一旦达到特定大小,将其触发到您的日志文件中。显然,这种方法存在一定的问题,即内存的波动性,但如果您希望通过磁盘访问获得性能,我会推荐这种方法。

如果您可以向我们展示一些用于您的日志记录过程等的代码,这当然会容易得多。

于 2013-04-17T15:19:46.150 回答