Presize MemoryStream when possible.

Also use GetBuffer when we know we have presized the stream to the exact required size to prevent a needless copy.
This commit is contained in:
RoosterDragon
2017-12-07 21:28:43 +00:00
committed by abcdefg30
parent 5d8c9a560a
commit ca01a1f186
7 changed files with 19 additions and 13 deletions

View File

@@ -44,7 +44,7 @@ namespace OpenRA.FileSystem
using (var z = pkg.GetInputStream(entry))
{
var ms = new MemoryStream();
var ms = new MemoryStream((int)entry.Size);
z.CopyTo(ms);
ms.Seek(0, SeekOrigin.Begin);
return ms;
@@ -104,7 +104,13 @@ namespace OpenRA.FileSystem
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
// We can work around this by creating a clean in-memory-only file, cutting all outside references
if (!create)
new MemoryStream(File.ReadAllBytes(filename)).CopyTo(pkgStream);
{
using (var copy = new MemoryStream(File.ReadAllBytes(filename)))
{
pkgStream.Capacity = (int)copy.Length;
copy.CopyTo(pkgStream);
}
}
pkgStream.Position = 0;
pkg = ZipFileHelper.Create(pkgStream);

View File

@@ -77,10 +77,10 @@ namespace OpenRA.Network
public virtual void SendSync(int frame, byte[] syncData)
{
var ms = new MemoryStream();
var ms = new MemoryStream(4 + syncData.Length);
ms.Write(BitConverter.GetBytes(frame));
ms.Write(syncData);
Send(ms.ToArray());
Send(ms.GetBuffer());
}
protected virtual void Send(byte[] packet)
@@ -197,10 +197,10 @@ namespace OpenRA.Network
public override void SendSync(int frame, byte[] syncData)
{
var ms = new MemoryStream();
var ms = new MemoryStream(4 + syncData.Length);
ms.Write(BitConverter.GetBytes(frame));
ms.Write(syncData);
queuedSyncPackets.Add(ms.ToArray());
queuedSyncPackets.Add(ms.GetBuffer());
}
protected override void Send(byte[] packet)

View File

@@ -240,7 +240,7 @@ namespace OpenRA
{
if (IsImmediate)
{
var ret = new MemoryStream();
var ret = new MemoryStream(1 + OrderString.Length + 1 + TargetString.Length + 1);
var w = new BinaryWriter(ret);
w.Write((byte)0xfe);
w.Write(OrderString);

View File

@@ -38,14 +38,14 @@ namespace OpenRA.Network
public static byte[] SerializeSync(int sync)
{
var ms = new MemoryStream();
var ms = new MemoryStream(1 + 4);
using (var writer = new BinaryWriter(ms))
{
writer.Write((byte)0x65);
writer.Write(sync);
}
return ms.ToArray();
return ms.GetBuffer();
}
public static int2 ReadInt2(this BinaryReader r)

View File

@@ -127,10 +127,10 @@ namespace OpenRA.Network
public void SendSync(int frame, byte[] syncData)
{
var ms = new MemoryStream();
var ms = new MemoryStream(4 + syncData.Length);
ms.Write(BitConverter.GetBytes(frame));
ms.Write(syncData);
sync.Add(ms.ToArray());
sync.Add(ms.GetBuffer());
// Store the current frame so Receive() can return the next chunk of orders.
ordersFrame = frame + LobbyInfo.GlobalSettings.OrderLatency;

View File

@@ -49,7 +49,7 @@ namespace OpenRA.Server
public byte[] Serialize()
{
var ms = new MemoryStream();
var ms = new MemoryStream(1 + Name.Length + 1 + Data.Length + 1);
var bw = new BinaryWriter(ms);
bw.Write((byte)0xfe);

View File

@@ -150,7 +150,7 @@ namespace OpenRA.Mods.Cnc.FileSystem
{
var decrypted = fish.Decrypt(h);
var ms = new MemoryStream();
var ms = new MemoryStream(decrypted.Length * 4);
var writer = new BinaryWriter(ms);
foreach (var t in decrypted)
writer.Write(t);