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