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