.net 字符串变量的长度&;字符列

.net 字符串变量的长度&;字符列,.net,string,.net,String,我倾向于将字符串的长度设为二的幂(16,32,64)。对字符串类型的对象(例如字符串变量、字符串集合或字符串类型数据库中的列)执行此操作是否有任何优化好处?这是在.net/sql server环境中。否。您将如何处理未使用的字符串块,因为它只是填充。这种浪费的成本与试图调整字符串可能带来的任何节约相比都是巨大的。无论如何,这样的长度是否会有任何好处是非常值得怀疑的。不。你会如何处理你不使用的字符串块,因为它只是填充。这种浪费的成本与试图调整字符串可能带来的任何节约相比都是巨大的。无论如何,这种长

我倾向于将字符串的长度设为二的幂(16,32,64)。对字符串类型的对象(例如字符串变量、字符串集合或字符串类型数据库中的列)执行此操作是否有任何优化好处?这是在.net/sql server环境中。

否。您将如何处理未使用的字符串块,因为它只是填充。这种浪费的成本与试图调整字符串可能带来的任何节约相比都是巨大的。无论如何,这样的长度是否会有任何好处是非常值得怀疑的。

不。你会如何处理你不使用的字符串块,因为它只是填充。这种浪费的成本与试图调整字符串可能带来的任何节约相比都是巨大的。无论如何,这种长度是否会有任何好处是非常值得怀疑的。

这是一个优化可能没有那么大好处的领域。我会根据需要定义长度,然后稍后再来优化长度(如果需要)。我想您会发现字符串长度的默认处理已经足够了。

这是一个优化可能没有那么大好处的领域。我会根据需要定义长度,然后稍后再来优化长度(如果需要)。我想您会发现字符串长度的默认处理已经足够了。

不。两个大小优化的威力来自数据库时代的黎明,与磁盘和内存中的数据对齐方式有关。如今,这是一种没有任何优势的退化行为。

不。两种大小优化的威力来自数据库时代的黎明,与磁盘和内存中的数据如何对齐有关。如今,这是一种没有任何优势的退化行为。

由于.NET字符串不是以null结尾的,因此您必须非常聪明地在每个字符串中实际使用完美数量的字符

String message = "hello world!!!!!"; // Exactly 16 chars
此外,只有当您的实现使用“malloc”执行内存分配时,两次调整字符串大小的能力才是重要的。这是一种内存分配策略,它说“如果我的单个内存位和内存块都有两种大小的能力,它们将更好地适应堆,并减少浪费的空间”


但是.NET不使用malloc来分配内存。相反,所有堆内存都是通过递增堆指针来分配的。当GC稍后释放内存时,它将执行堆压缩,以便所有新内存都来自末尾,并且它永远不需要在碎片堆中找到一小块内存。

由于.NET字符串不是以null结尾的,因此您必须非常聪明地在每个字符串中实际使用完美数量的字符

String message = "hello world!!!!!"; // Exactly 16 chars
此外,只有当您的实现使用“malloc”执行内存分配时,两次调整字符串大小的能力才是重要的。这是一种内存分配策略,它说“如果我的单个内存位和内存块都有两种大小的能力,它们将更好地适应堆,并减少浪费的空间”


但是.NET不使用malloc来分配内存。相反,所有堆内存都是通过递增堆指针来分配的。当GC稍后释放内存时,它将执行堆压缩,以便所有新内存都来自末尾,并且它永远不需要在碎片堆中找到一小块内存。

对于数据库中的列:请注意SQL的8kb数据页。行越小,每个数据页上可以容纳的行就越多。每个数据页中可以容纳的行越多,读取这些行的速度就越快(页面越少意味着IO越少)。这适用于表和索引


以下是有关数据库中列的更多信息。

:请注意SQL的8kb数据页。行越小,每个数据页上可以容纳的行就越多。每个数据页中可以容纳的行越多,读取这些行的速度就越快(页面越少意味着IO越少)。这适用于表和索引

下面是C#/.Net中的字符串是不可变的,因此在构造字符串时,没有必要(或任何方式)预先分配空间来容纳更多字符。如果追加到一个字符串,则会返回一个新字符串,它会创建新的空间来容纳整个新字符串,而不会重新分配。对于SQL列,如果事先知道字符串的确切长度(char(N))或使用可变字符数据(varchar(N)),则应将其设置为字符串的确切长度,并选择N作为合适的最大值。我看不出有什么必要将它们保持为二次方——当您创建一个varchar列时,ssm默认为50,所以微软显然也没有

预分配可能产生影响的一个地方是在StringBuilder之类的东西中或在预分配集合的大小中。再次强调,它的大小应该以不必调整大小为目标,但如果知道的话,应该接近它的实际用途。如果不知道,则跳过初始大小调整或使其足够大以容纳大多数大小写。

C#/.Net中的字符串是不可变的,因此在构造字符串时,没有必要(或任何方式)预先分配空间来容纳更多字符。如果追加到一个字符串,则会返回一个新字符串,它会创建新的空间来容纳整个新字符串,而不会重新分配。对于SQL列,如果事先知道字符串的确切长度(char(N))或使用可变字符数据(varchar(N)),则应将其设置为字符串的确切长度,并选择N作为合适的最大值。我看不出有什么必要将它们保持为二次方——当您创建一个varchar列时,ssm默认为50,所以微软显然也没有

预分配可能产生影响的一个地方是在StringBuilder之类的东西中或在预分配集合的大小中。再次强调,它的大小应该以不必调整大小为目标,但如果知道的话,应该接近它的实际用途。如果不知道,则跳过初始尺寸或ma