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))
|
||||
{
|
||||
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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user