VB6 - 在VB6中使用定长字符串是否有性能优势?

8

在.NET之前的Visual Basic中,程序员可以声明字符串的宽度。例如,我知道美国社会保障号码始终是十一个字符。因此,我可以声明一个字符串来存储社会保障号码,如下所示:

Dim SSN As String * 11

我的问题是:这样做是否会产生任何性能优势,使代码运行更快或者使用更少的内存?此外,固定长度的字符串在内存中分配方式是否不同(例如:堆栈和堆)?

1
请将该功能用于数据验证,而不是性能优化。 - JohnFx
2
我决定进行一些基准测试。我发现在我的代码中使用固定宽度字符串实际上导致了十五个百分点的性能下降,也就是说平均执行时间增加了十五个百分点。我仍然找不到一种方法来确定变量是在堆栈上分配还是在堆上分配,在VB6中我不知道有什么方法。至于数据验证,似乎这是一种不好的验证方式。我可能可以理解为什么此功能已从VB.NET中删除。 - Daniel Wolfe
很棒的问题;很棒的评论,Daniel! - CaBieberach
2个回答

6
不,没有性能优势。但是,即使有,除非您在循环中调用多次(比如数百万次),任何性能优势都将是微不足道的。此外,如果您没有使用整个长度(除非是非常短的固定长度字符串),固定长度字符串占用的内存比可变长度字符串多。像与某些COM API交互或对域约束进行建模(例如您提到的SSN示例)时通常会看到固定长度字符串。总之,在将代码变得难以维护之前,您应该仔细进行基准测试。

4
在VB6或更早的版本中,我唯一需要使用固定长度字符串的时候是在API调用方面。如果没有传递固定长度的字符串,则长度超过预期时有时会导致无法解释的错误,甚至有时比预期短。
如果您正在进行应用程序的更改,请确保不会将字符串传递给API或外部DLL,并且程序不需要输出固定长度字段,例如许多AS/400导入程序。
我个人从未看到性能差异,因为我运行了300k+记录的循环,但当我必须提供和处理固定长度时,就别无选择了。然而,VB默认使用未定义的长度,所以我想固定长度的性能会更低。
尝试编写一个测试应用程序来执行两个字符串的基本连接,并将其循环50k次。计算具有一个未定义长度和另一个固定长度之间的差异。

另一个使用固定长度字符串的原因是在读写固定长度记录到文件时。例如,一组类型的数组。 - Matt Wilko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接