Remove usage of BinaryFormatter for file cache (#8005)

This commit is contained in:
Sébastien Ros
2018-03-29 14:38:54 -07:00
committed by GitHub
parent 1908fff595
commit e3f010d62b

View File

@@ -59,15 +59,15 @@ namespace Orchard.OutputCache.Services {
var hash = GetCacheItemFileHash(key); var hash = GetCacheItemFileHash(key);
lock (String.Intern(hash)) { lock (String.Intern(hash)) {
using (var stream = SerializeContent(cacheItem)) { var filename = _appDataFolder.Combine(_content, hash);
var filename = _appDataFolder.Combine(_content, hash); using (var fileStream = _appDataFolder.CreateFile(filename)) {
using (var fileStream = _appDataFolder.CreateFile(filename)) { using (var writer = new BinaryWriter(fileStream)) {
stream.CopyTo(fileStream); fileStream.Write(cacheItem.Output, 0, cacheItem.Output.Length);
} }
} }
using (var stream = SerializeMetadata(cacheItem)) { using (var stream = SerializeMetadata(cacheItem)) {
var filename = _appDataFolder.Combine(_metadata, hash); filename = _appDataFolder.Combine(_metadata, hash);
using (var fileStream = _appDataFolder.CreateFile(filename)) { using (var fileStream = _appDataFolder.CreateFile(filename)) {
stream.CopyTo(fileStream); stream.CopyTo(fileStream);
} }
@@ -145,8 +145,10 @@ namespace Orchard.OutputCache.Services {
return null; return null;
} }
var content = DeserializeContent(stream); using(var ms = new MemoryStream()) {
cacheItem.Output = content; stream.CopyTo(ms);
cacheItem.Output = ms.ToArray();
}
} }
return cacheItem; return cacheItem;
@@ -189,20 +191,6 @@ namespace Orchard.OutputCache.Services {
} }
} }
internal static MemoryStream SerializeContent(CacheItem item) {
BinaryFormatter binaryFormatter = new BinaryFormatter();
var memoryStream = new MemoryStream();
binaryFormatter.Serialize(memoryStream, item.Output);
memoryStream.Seek(0, SeekOrigin.Begin);
return memoryStream;
}
internal static byte[] DeserializeContent(Stream stream) {
BinaryFormatter binaryFormatter = new BinaryFormatter();
var result = (byte[])binaryFormatter.Deserialize(stream);
return result;
}
internal static MemoryStream SerializeMetadata(CacheItem item) { internal static MemoryStream SerializeMetadata(CacheItem item) {
var output = item.Output; var output = item.Output;
item.Output = new byte[0]; item.Output = new byte[0];