String VB6-在VB6中使用固定宽度字符串是否有任何性能优势?

String VB6-在VB6中使用固定宽度字符串是否有任何性能优势?,string,vb6,String,Vb6,在.NET Visual Basic之前的版本中,程序员可以将字符串声明为某个宽度。例如,我知道一个社会保险号码(在美国)总是十一个字符。因此,我可以声明一个字符串,它将社会保险号码存储为11个字符的字符串,如下所示: Dim SSN As String * 11 我的问题是:这是否会产生任何类型的性能优势,使代码运行更快,或者使用更少的内存?此外,固定长度字符串在内存中的分配是否会有所不同(即:在堆栈上而不是在堆中)?否,没有性能优势 但是即使有,除非您在一个循环中多次(比如说数百万次)呼叫

在.NET Visual Basic之前的版本中,程序员可以将字符串声明为某个宽度。例如,我知道一个社会保险号码(在美国)总是十一个字符。因此,我可以声明一个字符串,它将社会保险号码存储为11个字符的字符串,如下所示:

Dim SSN As String * 11

我的问题是:这是否会产生任何类型的性能优势,使代码运行更快,或者使用更少的内存?此外,固定长度字符串在内存中的分配是否会有所不同(即:在堆栈上而不是在堆中)?

否,没有性能优势

但是即使有,除非您在一个循环中多次(比如说数百万次)呼叫,否则任何性能优势都可以忽略不计

此外,如果不使用整个长度(除非非常短的固定长度字符串),则固定长度字符串比可变长度字符串占用更多内存

和往常一样,在使代码更难维护之前,您应该仔细地进行基准测试


固定长度字符串通常在与某些COM API交互时出现,或者在对域约束进行建模时出现(例如您给出的SSN示例)

在VB6或更早版本中,我唯一不得不使用固定长度字符串的时间是处理API调用。如果不传递固定长度的字符串,则在长度超出预期时,甚至有时短于预期时,都会导致无法解释的错误

如果您正在使用并计划在应用程序中更改,请确保没有将字符串传递到API或外部DLL,并且程序不需要输出固定长度的字段,例如使用多个as/400导入程序

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


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

使用该功能进行数据验证,而不是性能优化。我决定进行一些基准测试。我发现在我的代码中使用固定宽度的字符串实际上导致了15%的性能下降——也就是说,平均执行时间延长了15%。我仍然找不到一种方法来确定变量是在堆栈还是堆上分配的,我也不知道在VB6中有什么方法。就数据验证而言,这似乎是一种糟糕的验证方法。我也许能理解为什么这个功能被从VB.NET中删除了;评论不错,丹尼尔!使用定长字符串的另一个原因是在将定长记录读写到文件时。e、 g.类型数组。