在.NET之前的Visual Basic中,程序员可以将字符串声明为某个宽度.例如,我知道社会安全号码(在美国)总是十一个字符.所以,我可以声明一个字符串,将社会安全号码存储为11个字符的字符串,如下所示:
Dim SSN As String * 11
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是否会创建任何类型的性能优势,使代码运行得更快或者使用更少的内存?另外,固定长度的字符串是否会以不同的方式在内存中分配(即:在堆栈中而不是在堆中)?
更新:
不,没有性能优势; 但即使有性能优势,它也是微优化(除非你在一个循环中调用很多(比如数百万)次.)
此外,如果您不使用整个长度,固定长度字符串通常比可变长度字符串占用更多内存(除非非常短的固定长度字符串).
与往常一样,在使代码难以维护之前,您应该仔细进行基准测试.
固定长度字符串通常在与某些COM API交互时,或者在对域约束进行建模时(例如您给出的SSN示例)
在 VB6 或更早版本中,我唯一一次必须使用固定长度字符串是在处理 API 调用时。当长度比预期长时,不传递固定长度的字符串有时会导致无法解释的错误,甚至有时比预期短时也会导致无法解释的错误。
如果您正在经历并计划在应用程序中更改它,请确保没有将字符串传递到 API 或外部 DLL,并且程序不需要输出固定长度字段,例如许多 AS/400导入程序。
我个人从未看到过性能差异,因为我正在运行超过 300k 条记录的循环,但当我这样做时,别无选择,只能提供并使用固定长度。然而VB喜欢默认使用未定义的长度,所以我想固定长度的性能会较低。
尝试编写一个测试应用程序来执行两个字符串的基本连接,并让它在函数上循环 50k 次。计算两者之间的差异,其中一个长度未定义,另一个长度固定。