MemoryStream и глубокое клонирование - PullRequest
2 голосов
/ 19 августа 2011

Я использую MemoryStream для глубокого клонирования в одном из моих методов.Я вызываю этот метод несколько раз, и я замечаю, что чем больше я его называю, тем больше он замедляет мою программу.Есть ли способ очищать поток памяти каждый раз, когда я прекращаю использовать поток памяти?

    public static T DeepClone<T>(T obj)
    {
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            ms.Position = 0;

            return (T)formatter.Deserialize(ms);
        }
    }

1 Ответ

0 голосов
/ 19 августа 2011

Поток памяти располагается в конце оператора using при каждом вызове.Это может быть не мусор, пока позже, однако.Я не думаю, что потенциальное использование памяти является вашей проблемой, хотя.Если вы получаете заметную разницу в скорости между вызовами, я думаю, вы должны сериализовать более сложный объект каждый раз.Если после вашего звонка на Serialize() вы объявите диагностический отчет, такой как

Console.WriteLine("Serialized size "+ms.Position);

, будет ли он сообщать один и тот же номер каждый раз или будет увеличиваться в размере?Если размер увеличивается, то вы каждый раз сериализуете большой объектный граф, и ожидается замедление.

...