c# - Unity 中的反序列化性能下降

标签 c# serialization unity3d deserialization binaryformatter

我正在 Unity 中制作 3D 模拟器。
对于这个模拟器,我需要一些存储在 Serializable 对象中的数据。
这个对象是在我制作的 DLL 文件中定义的。
我用这段代码反序列化它:

public class myObject
{
    static public myObject LoadFromFile(String Path)
    {
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter BF = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        System.IO.FileStream FS = new System.IO.FileStream(Path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
        myObject Result = BF.Deserialize(FS) as myObject;
        FS.Close();
        return Result;
    }
}

我的 unity 程序引用了包含“myObject”定义的类库。
如果我从 Unity 运行反序列化函数,这个过程需要 35.080 秒。

如果我在一个 Windows 应用程序中运行它,我为测试目的创建并引用同一个类库并打开同一个文件,这个过程只需要 0.260 秒。

即使我异步运行此过程,在 Unity 中也需要很长时间。

我想知道为什么当我从 Unity 运行这段代码时需要那么多时间? 如果有什么我可以做的?

提前致谢,
马丁

最佳答案

我不知道为什么会这样,但您可以尝试实现 ISerializable 接口(interface),自己序列化您的成员,看看 unity 是否仍然那么慢。

您将需要实现 GetObjectData 和一个采用 SerializationInfo 和 StreamingContext 的 protected 构造函数。 GetObjectData 用于将对象放在序列化流上,构造器用于……呃……构建。

public class MyObject : ISerializable
{
  private bool somemember;

  protected Complaint(SerializationInfo info, StreamingContext context)
  {
    somemember = info.GetBoolean("b");
  }

  [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
  public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
  {
    info.AddValue("b", somemember);
  }
}

希望这对您有所帮助!

关于c# - Unity 中的反序列化性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903751/

相关文章:

ios - Unity 游戏在 iOS 上加载时崩溃

audio - Unity声音没有播放

c# - 通过c#发送传真

c# - GridView 编辑 - 检查行颜色

java - 使用 Java 和 Jackson 将 Json 序列化为没有模式的通用结构

c# - 在 C# 7.3 中序列化非托管泛型类型

c# - 符号加载问题疑难解答 - Visual Studio 2019 - Step Into 不再工作

c# - 将 SqlParameter 添加到 SqlParameterCollection 时出现 NullReferenceException

Java 到 Jackson JSON 序列化 : Money fields

ios - xCode 不会从 Unity 解析项目