如果我将接收的字节数设置为2,147,483,647?

时间:2016-06-10 09:11:06

标签: c# sockets asynchronous networking

我正在使用Socket.BeginReceive方法异步接收数据。如果我将size参数(接收的字节数)设置为int最大值(2,147,483,647)并将我的字节数组的大小设置为2,147,483,647,会发生什么? 这将如何影响性能?

1 个答案:

答案 0 :(得分:1)

嗯,根据

https://msdn.microsoft.com/en-us/library/dxkwh6zw(v=vs.110).aspx

Socket.BeginReceive写入buffer,因此size必须等于或小于而不是buffer.Length,否则您将ArgumentOutOfRangeException抛出:

 ArgumentOutOfRangeException 
  

偏移量小于0.

     

- 或 - offset大于缓冲区的长度。

     

- 或 - 尺寸小于0.

     

-OR -

     

大小大于缓冲区的长度减去offset参数的值。

所以你必须分配一个巨大的2 GB)数组

  byte[] buffer = new byte[2147483647];

因此,如果您正在使用 64位.Net 并拥有足够的内存,那么您很幸运;否则你会被OutOfMemoryException抛出。

结论:您将有可怕的内存开销(每个连接2 GB)和可忽略的性能增益。不要这样做,将size设置为合理的值。