aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/AppBase
diff options
context:
space:
mode:
authorBond_009 <Bond.009@outlook.com>2020-08-07 17:38:01 +0200
committerBond-009 <bond.009@outlook.com>2020-08-09 14:08:55 +0200
commit371a09c60bddb49298e2cf7f1968514ab4d243e4 (patch)
tree6932ce68f3e27c0bfbf5556139dfadd05ba63cda /Emby.Server.Implementations/AppBase
parent75bb127599c2507391c612332d1866d1fdc9da13 (diff)
MemoryStream optimizations
Diffstat (limited to 'Emby.Server.Implementations/AppBase')
-rw-r--r--Emby.Server.Implementations/AppBase/ConfigurationHelper.cs16
1 files changed, 11 insertions, 5 deletions
diff --git a/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs b/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs
index 0b681fddf..4c9ab33a7 100644
--- a/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs
+++ b/Emby.Server.Implementations/AppBase/ConfigurationHelper.cs
@@ -1,3 +1,5 @@
+#nullable enable
+
using System;
using System.IO;
using System.Linq;
@@ -22,7 +24,7 @@ namespace Emby.Server.Implementations.AppBase
{
object configuration;
- byte[] buffer = null;
+ byte[]? buffer = null;
// Use try/catch to avoid the extra file system lookup using File.Exists
try
@@ -36,19 +38,23 @@ namespace Emby.Server.Implementations.AppBase
configuration = Activator.CreateInstance(type);
}
- using var stream = new MemoryStream();
+ using var stream = new MemoryStream(buffer?.Length ?? 0);
xmlSerializer.SerializeToStream(configuration, stream);
// Take the object we just got and serialize it back to bytes
- var newBytes = stream.ToArray();
+ byte[] newBytes = stream.GetBuffer();
+ int newBytesLen = (int)stream.Length;
// If the file didn't exist before, or if something has changed, re-save
- if (buffer == null || !buffer.SequenceEqual(newBytes))
+ if (buffer == null || !newBytes.AsSpan(0, newBytesLen).SequenceEqual(buffer))
{
Directory.CreateDirectory(Path.GetDirectoryName(path));
// Save it after load in case we got new items
- File.WriteAllBytes(path, newBytes);
+ using (var fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
+ {
+ fs.Write(newBytes, 0, newBytesLen);
+ }
}
return configuration;