2011-04-27 42 views
8

在.NET.NET Visual Basic中,程序员可以声明一个字符串为特定的宽度。例如,我知道一个社会安全号码(在美国)总是十一个字符。所以,我可以宣布,将存储的社会保障号码为十一字符串像这样的字符串:VB6 - 在VB6中使用固定宽度的字符串是否有任何性能优势?

Dim SSN As String * 11 

我的问题是:这是否创建任何类型的性能优势将要么使代码的运行速度或者使用更少的内存?另外,将固定长度的字符串以不同的方式分配到内存中(,即:在堆栈中而不是在堆中)?

+1

使用该功能进行数据验证,而不是性能优化。 – JohnFx 2011-04-27 04:15:18

+2

我决定做一些基准测试。我发现在我的代码中使用固定宽度的字符串实际上导致了15%的性能下降** - 也就是说,平均执行时间延长了15%。我仍然无法找到一种方法来确定变量是否分配在堆栈或堆上,并且我不知道VB6中的一种方法。至于数据验证,这似乎是一个不好的验证方法。我也许可以理解为什么从VB.NET中删除了这个功能。 – 2011-04-27 15:24:22

+0

伟大的问题;很好的评论,丹尼尔! – CaBieberach 2011-11-22 10:23:23

回答

4

在VB6或唯一的时间比较早,我不得不使用时

固定长度的字符串是通常所见固定长度的字符串与API调用一起工作。在长度比预期更长的时候,不通过固定长度的字符串会导致无法解释的错误,有时甚至比预期的短。

如果您正在审阅并计划在应用程序中更改该属性,请确保没有将字符串传递给API或外部DLL,并且该程序不需要输出固定长度的字段,例如与许多AS/400导入程序。

我个人从来没有看到性能差异,因为我正在运行300k +记录的循环,但没有选择,只能提供和使用固定长度的工作。然而,VB喜欢默认使用未定义的长度,所以我会想象固定长度下的性能会更低。

尝试编写一个测试应用程序来执行两个字符串的基本串联,并让它在函数上循环50k次。时间两者之间的差异有一个未定义的长度,另一个是固定的。

+0

使用固定长度字符串的另一个原因是在将固定长度记录读写到文件时。例如一组类型。 – 2013-06-27 07:52:04

5

更新

没有,有没有性能优势;但是即使有性能上的好处,它也是一个微型优化(除非你在一个循环中调用了很多(例如数百万次))。

此外,固定长度的字符串通常占用比变长的字符更多的内存if你没有使用整个长度(除非非常短的固定长度字符串)。

与往常一样,在使代码难以维护之前,您应该仔细地进行基准测试。一些COM API的交互,或建模域约束时(比如你给一个SSN的例子)

相关问题