From e1a66ae0cd39b16bc7fd0163fe807765ef95055c Mon Sep 17 00:00:00 2001 From: lidgren Date: Wed, 24 Oct 2012 13:06:46 +0000 Subject: [PATCH] Robustified and optimized GetBestChunkSize() --- Lidgren.Network/NetFragmentationHelper.cs | 9 +++++---- .../DurableSample/DurableSample.suo | Bin 53760 -> 55296 bytes 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Lidgren.Network/NetFragmentationHelper.cs b/Lidgren.Network/NetFragmentationHelper.cs index d502a60..7e93dd8 100644 --- a/Lidgren.Network/NetFragmentationHelper.cs +++ b/Lidgren.Network/NetFragmentationHelper.cs @@ -152,8 +152,9 @@ namespace Lidgren.Network internal static int GetBestChunkSize(int group, int totalBytes, int mtu) { - int tryNumChunks = (totalBytes / (mtu - 8)) + 1; - int tryChunkSize = (totalBytes / tryNumChunks) + 1; // +1 since we immediately decrement it in the loop + int tryChunkSize = mtu - NetConstants.HeaderByteSize - 4; // naive approximation + int est = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, totalBytes / tryChunkSize); + tryChunkSize = mtu - NetConstants.HeaderByteSize - est; // slightly less naive approximation int headerSize = 0; do @@ -164,9 +165,9 @@ namespace Lidgren.Network if (numChunks * tryChunkSize < totalBytes) numChunks++; - headerSize = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, numChunks); + headerSize = GetFragmentationHeaderSize(group, totalBytes, tryChunkSize, numChunks); // 4+ bytes - } while (tryChunkSize + headerSize + 5 + 1 >= mtu); + } while (tryChunkSize + headerSize + NetConstants.HeaderByteSize + 1 >= mtu); return tryChunkSize; } diff --git a/Samples/LibraryTestSamples/DurableSample/DurableSample.suo b/Samples/LibraryTestSamples/DurableSample/DurableSample.suo index 148de6d8c3ec664f32425fd89d6c4eb479ce6310..290305d3943afafd9237b0f0c3e7e3ead5891443 100644 GIT binary patch delta 5336 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 CzNRby