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:
@@ -44,7 +44,7 @@ namespace OpenRA.FileSystem
|
|||||||
|
|
||||||
using (var z = pkg.GetInputStream(entry))
|
using (var z = pkg.GetInputStream(entry))
|
||||||
{
|
{
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream((int)entry.Size);
|
||||||
z.CopyTo(ms);
|
z.CopyTo(ms);
|
||||||
ms.Seek(0, SeekOrigin.Begin);
|
ms.Seek(0, SeekOrigin.Begin);
|
||||||
return ms;
|
return ms;
|
||||||
@@ -104,7 +104,13 @@ namespace OpenRA.FileSystem
|
|||||||
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
|
// 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
|
// We can work around this by creating a clean in-memory-only file, cutting all outside references
|
||||||
if (!create)
|
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;
|
pkgStream.Position = 0;
|
||||||
pkg = ZipFileHelper.Create(pkgStream);
|
pkg = ZipFileHelper.Create(pkgStream);
|
||||||
|
|||||||
@@ -77,10 +77,10 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
public virtual void SendSync(int frame, byte[] syncData)
|
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(BitConverter.GetBytes(frame));
|
||||||
ms.Write(syncData);
|
ms.Write(syncData);
|
||||||
Send(ms.ToArray());
|
Send(ms.GetBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Send(byte[] packet)
|
protected virtual void Send(byte[] packet)
|
||||||
@@ -197,10 +197,10 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
public override void SendSync(int frame, byte[] syncData)
|
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(BitConverter.GetBytes(frame));
|
||||||
ms.Write(syncData);
|
ms.Write(syncData);
|
||||||
queuedSyncPackets.Add(ms.ToArray());
|
queuedSyncPackets.Add(ms.GetBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Send(byte[] packet)
|
protected override void Send(byte[] packet)
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ namespace OpenRA
|
|||||||
{
|
{
|
||||||
if (IsImmediate)
|
if (IsImmediate)
|
||||||
{
|
{
|
||||||
var ret = new MemoryStream();
|
var ret = new MemoryStream(1 + OrderString.Length + 1 + TargetString.Length + 1);
|
||||||
var w = new BinaryWriter(ret);
|
var w = new BinaryWriter(ret);
|
||||||
w.Write((byte)0xfe);
|
w.Write((byte)0xfe);
|
||||||
w.Write(OrderString);
|
w.Write(OrderString);
|
||||||
|
|||||||
@@ -38,14 +38,14 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
public static byte[] SerializeSync(int sync)
|
public static byte[] SerializeSync(int sync)
|
||||||
{
|
{
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream(1 + 4);
|
||||||
using (var writer = new BinaryWriter(ms))
|
using (var writer = new BinaryWriter(ms))
|
||||||
{
|
{
|
||||||
writer.Write((byte)0x65);
|
writer.Write((byte)0x65);
|
||||||
writer.Write(sync);
|
writer.Write(sync);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ms.ToArray();
|
return ms.GetBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int2 ReadInt2(this BinaryReader r)
|
public static int2 ReadInt2(this BinaryReader r)
|
||||||
|
|||||||
@@ -127,10 +127,10 @@ namespace OpenRA.Network
|
|||||||
|
|
||||||
public void SendSync(int frame, byte[] syncData)
|
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(BitConverter.GetBytes(frame));
|
||||||
ms.Write(syncData);
|
ms.Write(syncData);
|
||||||
sync.Add(ms.ToArray());
|
sync.Add(ms.GetBuffer());
|
||||||
|
|
||||||
// Store the current frame so Receive() can return the next chunk of orders.
|
// Store the current frame so Receive() can return the next chunk of orders.
|
||||||
ordersFrame = frame + LobbyInfo.GlobalSettings.OrderLatency;
|
ordersFrame = frame + LobbyInfo.GlobalSettings.OrderLatency;
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ namespace OpenRA.Server
|
|||||||
|
|
||||||
public byte[] Serialize()
|
public byte[] Serialize()
|
||||||
{
|
{
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream(1 + Name.Length + 1 + Data.Length + 1);
|
||||||
var bw = new BinaryWriter(ms);
|
var bw = new BinaryWriter(ms);
|
||||||
|
|
||||||
bw.Write((byte)0xfe);
|
bw.Write((byte)0xfe);
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace OpenRA.Mods.Cnc.FileSystem
|
|||||||
{
|
{
|
||||||
var decrypted = fish.Decrypt(h);
|
var decrypted = fish.Decrypt(h);
|
||||||
|
|
||||||
var ms = new MemoryStream();
|
var ms = new MemoryStream(decrypted.Length * 4);
|
||||||
var writer = new BinaryWriter(ms);
|
var writer = new BinaryWriter(ms);
|
||||||
foreach (var t in decrypted)
|
foreach (var t in decrypted)
|
||||||
writer.Write(t);
|
writer.Write(t);
|
||||||
|
|||||||
Reference in New Issue
Block a user