Skip to content

Commit 16d5a71

Browse files
author
Oren Novotny
authored
Merge pull request #646 from Styxxy/memleakxml
fixes #643 add xmlserializer cache
2 parents 564559d + 8fef9a0 commit 16d5a71

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

Refit/XmlContentSerializer.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Concurrent;
23
using System.IO;
34
using System.Net.Http;
45
using System.Text;
@@ -12,6 +13,7 @@ namespace Refit
1213
public class XmlContentSerializer : IContentSerializer
1314
{
1415
private readonly XmlContentSerializerSettings settings;
16+
private readonly ConcurrentDictionary<Type, XmlSerializer> serializerCache = new ConcurrentDictionary<Type, XmlSerializer>();
1517

1618
public XmlContentSerializer() : this(new XmlContentSerializerSettings())
1719
{
@@ -24,8 +26,8 @@ public XmlContentSerializer(XmlContentSerializerSettings settings)
2426

2527
public Task<HttpContent> SerializeAsync<T>(T item)
2628
{
27-
var xmlSerializer = new XmlSerializer(item.GetType(), settings.XmlAttributeOverrides);
28-
29+
var xmlSerializer = serializerCache.GetOrAdd(item.GetType(), t => new XmlSerializer(t, settings.XmlAttributeOverrides));
30+
2931
using (var stream = new MemoryStream())
3032
{
3133
using (var writer = XmlWriter.Create(stream, settings.XmlReaderWriterSettings.WriterSettings))
@@ -41,8 +43,8 @@ public Task<HttpContent> SerializeAsync<T>(T item)
4143

4244
public async Task<T> DeserializeAsync<T>(HttpContent content)
4345
{
44-
var xmlSerializer = new XmlSerializer(typeof(T), settings.XmlAttributeOverrides);
45-
46+
var xmlSerializer = serializerCache.GetOrAdd(typeof(T), t => new XmlSerializer(t, settings.XmlAttributeOverrides));
47+
4648
using (var input = new StringReader(await content.ReadAsStringAsync().ConfigureAwait(false)))
4749
using (var reader = XmlReader.Create(input, settings.XmlReaderWriterSettings.ReaderSettings))
4850
return (T)xmlSerializer.Deserialize(reader);

0 commit comments

Comments
 (0)