C# 为什么使用1024作为缓冲区?

C# 为什么使用1024作为缓冲区?,c#,.net,C#,.net,我正在浏览另一位开发人员编写的一些源代码,当涉及到流(文件、内存等)和文件/内容上传时,我遇到了以下代码行。此人使用1024作为缓冲区是否有特殊原因?为什么这1024乘以16 byte[] buffer = new byte[16*1024]; 有人能进一步澄清一下吗?此外,如果有人能指导我阅读文章等来进一步阅读和理解这一点,那将是非常棒的。1024是一个千字节中的确切字节数。这行的意思是他们正在创建一个16KB的缓冲区。这就是一切。如果您想了解为什么一个千字节中有1024个字节,以及为什么在

我正在浏览另一位开发人员编写的一些源代码,当涉及到流(文件、内存等)和文件/内容上传时,我遇到了以下代码行。此人使用1024作为缓冲区是否有特殊原因?为什么这1024乘以16

byte[] buffer = new byte[16*1024];

有人能进一步澄清一下吗?此外,如果有人能指导我阅读文章等来进一步阅读和理解这一点,那将是非常棒的。

1024是一个千字节中的确切字节数。这行的意思是他们正在创建一个16KB的缓冲区。这就是一切。如果您想了解为什么一个千字节中有1024个字节,以及为什么在编程中使用它是一个好主意,那么这将是一个很好的起点。也将是一个好地方看。虽然它是在谈论磁盘空间,但它的总体思路是相同的。

1024是一个千字节中的字节数。这行的意思是他们正在创建一个16KB的缓冲区。这就是一切。如果您想了解为什么一个千字节中有1024个字节,以及为什么在编程中使用它是一个好主意,那么这将是一个很好的起点。也将是一个好地方看。虽然它是在谈论磁盘空间,但这是相同的一般想法。

以2的幂分配内存的做法是从很久以前就开始的。字大小是2的幂(例如,全字=32位,双字=8位),虚拟内存页大小是2的幂。您希望分配的内存在方便的边界上对齐,因为这样可以提高执行效率。例如,曾几何时,如果一个字或双字不在合适的边界上(例如,内存地址可分别被4或8整除),则将其加载到寄存器中的CPU周期成本更高。如果您分配了一大块内存,那么您也可以使用一整页虚拟内存,因为您可能会锁定整个页面

如今这并不重要,但旧的做法很难改变


[除非您知道内存分配器是如何工作的,以及每个
malloc()
'd块中涉及多少开销字,否则它可能根本不起作用。

以2的幂分配内存的做法从很久以前就开始了。字大小是2的幂(例如,全字=32位,双字=8位),虚拟内存页大小为2的幂次方。您希望分配的内存在方便的边界上对齐,因为这样可以提高执行效率。例如,从前,如果不在适当的边界上,则将一个字或双字加载到寄存器中的CPU周期成本更高(例如,可以分别被4或8整除的内存地址)。如果你分配了一大块内存,你可能会消耗整个页面的虚拟内存,因为你可能会锁定整个页面

如今这并不重要,但旧的做法很难改变


[除非您知道内存分配器是如何工作的,以及每个
malloc()涉及多少开销字]
'd block…它可能无论如何都不起作用。

因为计算机中的'kilo'=人类中的'kilo'。他们本可以选择16*1000,不会对任何正常的感官产生影响。这是没有理由的。你只需要一个大的缓冲区,这样你就不会出现溢出情况。通常情况下,人们会将缓冲区设为2的幂。16的原因已经确定设想多达16条消息(最多1024条)将被视为更糟糕的情况。但这只是一个猜测。因为计算机中的“kilo”=人类中的“kilo”.他们本可以选择16*1000,并且不会对任何正常感官产生影响。这不是理由。你只需要一个大的缓冲区,这样你就不会出现溢出情况。通常情况下,人们将缓冲区设为2的幂on for 16的开发设想为最多16条消息(最多1024条)会被视为更糟糕的情况。但这只是一个猜测。不再是了。现在1 KB==1000字节,1 KB=1024。从语法上看,是的,但当涉及到计算机和相关术语时,一KB实际上是1024。你没有读链接,是吗?看到这个:-为了消除混淆,IEC标准1998年,将前缀kibi-、mebi-、gibi等表示为二的幂,留下了kilo-、mega-、giga等的SI含义。我确实读了链接,但这并没有改变这仅仅是一个技术性的事实,因为很少有人将其称为“kibibyte”,它对提供的答案没有任何贡献。正如我前面提到的,当涉及到计算机和相关术语时,一个千字节实际上是1024。不再是了。现在1个千字节==1000字节,1个千字节=1024。从语法上看,是的,但是当涉及到计算机和相关术语时,一个千字节实际上是1024。哟你没有读过链接,是吗?看到了吗:-为了消除混淆,IEC标准化了-在1998年-前缀kibi-,mebi-,gibi,等为二的幂,留下了kilo-,mega-,giga等的SI含义。我读过链接,但这并没有改变这仅仅是一个技术性的事实,因为很少有人把它称为“kibibyte”,它对提供的答案没有任何贡献。正如我前面提到的,当涉及到计算机和相关术语时,一个KB实际上是1024。