C#.NET序列化器是原子的吗?

时间:2018-11-21 23:56:43

标签: c# .net serialization

直截了当的问题。如果CPU在序列化过程中崩溃,文件会被破坏吗?

.NET序列化C#的示例:

    public bool TrySerializeToXML<T>(String FilePath, T t, XmlAttributeOverrides XmlAttributeOverrides = null)
    {
        lock (SerializationLock)
        {
            XmlSerializer Serializer = null;
            try
            {
                if (XmlAttributeOverrides == null) Serializer = new XmlSerializer(t.GetType());
                else Serializer = new XmlSerializer(t.GetType(), XmlAttributeOverrides);
                using (TextWriter TextWriter = new StreamWriter(FilePath))
                {
                    Serializer.Serialize(TextWriter, t);
                }
            }
            catch
            {
                return false;
            }
            return true;
        }
    }

1 个答案:

答案 0 :(得分:2)

  1. ADJUSTED_LEVEL EMPLOYEE_NUMBER MANAGER DEPARTMENT 1 10 1 2 200 10 2 3 2010 200 2 4 2040 200 2 5 2070 200 2 6 2100 200 2 3 2020 200 2 4 2050 200 2 5 2080 200 2 3 2030 200 2 4 2060 200 2 5 2090 200 2 2 300 10 3 3 3010 300 3 4 3040 300 3 5 3070 300 3 6 3100 300 3 3 3020 300 3 4 3050 300 3 5 3080 300 3 3 3030 300 3 4 3060 300 3 5 3090 300 3 2 400 10 4 3 4010 400 4 4 4040 400 4 5 4070 400 4 6 4100 400 4 3 4020 400 4 4 4050 400 4 5 4080 400 4 3 4030 400 4 4 4060 400 4 5 4090 400 4 2 500 10 5 3 5010 500 5 4 5040 500 5 5 5070 500 5 6 5100 500 5 3 5020 500 5 4 5050 500 5 5 5080 500 5 3 5030 500 5 4 5060 500 5 5 5090 500 5 在流上工作

  2. 在这种情况下,该流是XmlSerializer

  3. FileStream在可刷新缓冲区(默认为4k)上工作,这意味着当缓冲区达到最大值时,它将刷新到磁盘上

如果应用程序崩溃或序列化过程中发生序列化错误,则可能没有(或只有部分数据)刷新到磁盘

原子无疑是在此使用的错误词,无论哪种方式都不是原子