Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何提高反序列化速度?_C#_Performance_Serialization_Binaryformatter - Fatal编程技术网

C# 如何提高反序列化速度?

C# 如何提高反序列化速度?,c#,performance,serialization,binaryformatter,C#,Performance,Serialization,Binaryformatter,使用BinaryFormatter序列化/反序列化,得到的序列化文件大小约为80MB。反序列化需要几分钟的时间。我该如何改进这一点?以下是反序列化代码: public static Universe DeserializeFromFile(string filepath) { Universe universe = null; FileStream fs = new FileStream(filepath, FileMode.Open);

使用BinaryFormatter序列化/反序列化,得到的序列化文件大小约为80MB。反序列化需要几分钟的时间。我该如何改进这一点?以下是反序列化代码:

    public static Universe DeserializeFromFile(string filepath)
    {
        Universe universe = null;

        FileStream fs = new FileStream(filepath, FileMode.Open);

        BinaryFormatter bf = new BinaryFormatter();
        try
        {
            universe = (Universe)bf.Deserialize(fs);
        }
        catch (SerializationException e)
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally
        {
            fs.Close();
        }

        return universe;
    }

可能在反序列化之前将所有文件读取到内存中,或者使用其他序列化技术?

请查看此项。

尝试先将文件一次读取到内存流中,然后使用内存流反序列化。

尝试
反序列化
。据说它可以提高速度。

在Universe类中实现ISerializable

数据有多复杂?如果它是一个对象树(而不是一个完整的图形),那么您可能会从尝试中得到一些有趣的结果。它通常非常容易适应现有类,并且通常更小、更快、更不脆弱(您可以在不破坏数据的情况下更改对象模型)

披露:我是作者,所以可能有偏见-但这真的不可怕。。。不过,我很乐意借点时间帮你试试


*=在合理范围内

如果这让事情变得更好而不是更糟,那么序列化格式就糟透了。为什么I/O绑定的任务后面跟着CPU绑定的任务,而您可以同时执行这两个任务,交错执行?反序列化460138毫秒,反序列化459967毫秒。。反序列化实际上更快!我将带有unsafederialize的标题设置为null,这可能是原因吗?