在.NET之前的Visual中,程序员可以将字符串声明为一定宽度。例如,我知道一个社会保障号码(在美国)总是十一个字符.因此,我可以声明一个字符串,该字符串可以将社会保障数字存储为11个字符的字符串,如下所示:
Dim SSN As String * 11我的问题是:这是否会产生任何类型的性能效益,从而使代码运行得更快,或者使用更少的内存?另外,在内存中是否会以不同的方式分配一个固定长度的字符串(即:在堆栈上,而不是在堆中)?
发布于 2011-04-29 02:13:03
在VB6或更早的时候,我不得不使用固定长度字符串的唯一一次是使用API调用。如果不传递固定长度的字符串,则在长度大于预期时,有时甚至在短于预期时,都会导致无法解释的错误。
如果您正在进行并计划更改应用程序中的字符串,请确保没有将字符串传递给API或外部DLL,并且程序不需要输出固定长度的字段,例如使用多个AS/400导入程序。
当我运行300k+记录循环时,我个人从来没有看到过性能上的差异,但我别无选择,只能提供固定长度的服务。但是,VB在默认情况下喜欢使用未定义的长度,所以我可以想象固定长度下的性能会更低。
尝试编写一个测试应用程序来执行两个字符串的基本连接,并让它在函数上循环大约50k次。时间有一个未定的长度和另一个固定的长度之间的差异。
发布于 2011-04-27 02:51:26
不,没有性能上的好处。
但是,即使存在,除非您在一个循环中调用了许多次(比如数百万次),否则任何性能的好处都是微不足道的。
此外,如果不使用整个长度(除非非常短的固定长度字符串),则固定长度字符串占用的内存比可变长度字符串要多。
和往常一样,在使代码更难维护之前,您应该小心地进行基准测试。
固定长度的字符串通常出现在与某些COM API交互时,或者在域约束建模时(例如您给出的SSN示例)。
https://stackoverflow.com/questions/5798792
复制相似问题