我在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;
}
}
我的团结程序引用了包含' myObject'的定义的类库。
如果我从Unity运行反序列化功能,则此过程需要35.080秒。
如果我在我为测试目的而创建的Windows应用程序中运行它并且引用相同的类库并打开相同的文件,则此过程仅需0.260秒。
即使我异步运行此过程,在Unity中也需要很长时间。
我想知道为什么从Unity运行此代码需要更长的时间? 如果我能做些什么呢?
提前致谢,
马腾
答案 0 :(得分:1)
我不知道为什么会发生这种情况,但你可以尝试的一件事是实现ISerializable接口,自己序列化你的成员,看看团结是否仍然很慢。
您需要实现GetObjectData以及采用SerializationInfo和StreamingContext的受保护构造函数。 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);
}
}
希望这有帮助!
答案 1 :(得分:0)