2016-06-10 28 views
0

我正在使用Socket.BeginReceive方法異步接收數據。如果將size參數(要接收的字節數)設置爲int最大值(2,147,483,647)並將字節數組的大小設置爲2,147,483,647,會發生什麼? 這是如何影響性能的?如果我將接收的字節數設置爲2,147,483,647?

+4

爲什麼不試一試,找出答案。 – stuartd

+1

我希望你能有一個連接 –

+0

因爲只有連接了很多客戶端時纔會顯示效果,如果我這樣做,客戶端程序會影響我的電腦速度。 – None

回答

1

那麼,根據

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

Socket.BeginReceive寫入到buffer,因此size必須等於或小於buffer.Length否則,你將有ArgumentOutOfRangeException拋出:

ArgumentOutOfRangeException 

偏移量小於0.

- 或 - 偏移量大於緩衝區的長度。

- 或 - 尺寸小於0

- 或 -

大小大於緩衝器的長度減去所述偏移參數的值越大。

所以,你必須分配一個巨大2 GB)陣列

byte[] buffer = new byte[2147483647]; 

所以,如果你的工作64位.NET並有足夠的內存,你」幸運的;否則你會有OutOfMemoryException拋出。

結論:你將有可怕內存開銷(2 GB每個連接)和可以忽略不計的性能增益。不要這樣做,請將size設置爲合理的值。

相關問題