Мне нужно сохранять состояние сложного объекта C # каждые 5 минут.
Я использую этот базовый подход ниже.Я нашел «быструю» копию объекта по ссылке внизу.
Если я закомментирую часть «Задача» в WriteToBinaryFileTask, оставив только копию, тогда процесс займет 160 мс.Это слишком долго для моих нужд.Объект может обновляться каждые несколько миллисекунд.Мне нужно взять копию, так как я не могу заблокировать реальный объект во время записи на диск, так как это занимает 1500 мс.
Какие альтернативы я мог бы попытаться сделать из состояния моего объекта.Мне действительно нужно сократить время до 10 мс.
private void SaveState()
{
Stopwatch sw = new Stopwatch();
sw.Start();
UtilsBinarySerialization.WriteToBinaryFileTask<int>(StatePath("PreviousSignalMainLogic"), PreviousSignalMainLogic);
sw.Stop();
Console.WriteLine("Secs: " + sw.ElapsedMilliseconds);
}
public static void WriteToBinaryFileTask<T>(string filePath, T objectToWrite, bool append = false)
{
T objectCopy = ObjectExtensions.Copy(objectToWrite);
Task taskA = new Task(() =>
{
using (Stream stream = File.Open(filePath, append ? FileMode.Append : FileMode.Create))
{
var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
binaryFormatter.Serialize(stream, objectCopy);
}
}
);
taskA.Start();
}
https://github.com/Burtsev-Alexey/net-object-deep-copy/blob/master/ObjectExtensions.cs