Compact framework 紧凑框架的预编译protobuf网络型模型
我在compact framework(3.5)上反序列化了数千个对象,速度很慢。需要20秒以上的时间才能完成。我发现它是通过反射来完成的,而不是像非紧凑的对应物那样编译和运行。 所以我想,我可以先预编译并生成一个类型模型dll吗 因此,我做了以下工作:Compact framework 紧凑框架的预编译protobuf网络型模型,compact-framework,deserialization,protocol-buffers,protobuf-net,Compact Framework,Deserialization,Protocol Buffers,Protobuf Net,我在compact framework(3.5)上反序列化了数千个对象,速度很慢。需要20秒以上的时间才能完成。我发现它是通过反射来完成的,而不是像非紧凑的对应物那样编译和运行。 所以我想,我可以先预编译并生成一个类型模型dll吗 因此,我做了以下工作: 将所有合同类提取到智能设备dll(它引用Protobuf net CF3.5 dll) 创建一个桌面3.5控制台应用程序,引用Protobuf net“桌面”Dll和上面创建的契约Dll class Program { static voi
class Program
{
static void Main(string[] args)
{
var bb = TypeModel.Create();
foreach (var t in Assembly.GetAssembly(typeof(My.ContractX)).GetTypes())
{
var contract = t.GetCustomAttributes(typeof (ProtoBuf.ProtoContractAttribute), false);
if (contract.Length > 0)
{
bb.Add(t, true);
}
}
bb.Compile("My.TypeModel", "My.Serialization.dll");
}
}
那么回到我的问题,我如何实现类型模型的预生成以在紧凑的框架中使用呢?或者我可以通过做其他事情来提高性能吗?我想这是个好消息。我花了相当多的时间在交叉编译的问题上(好吧,我主要是被问到WP7和WinRT的人所驱使),最终导致了一个错误 这已经完成了代码所做的工作,即它在输入程序集中查找所有
[ProtoContract]
类型。老实说,我还没有尝试过CF,但我很有希望。我真的很想听到你的进展如何。我没有用CF测试它的唯一原因是我的VS2008虚拟机的外部驱动器死机了
用法:
precompile {some path}\YourCFDto.dll –o:MySerializer.dll –t:MySerializer
注意:目前您需要从源代码构建“预编译”,但如果这是一个问题,我可以着手发布它
如果你有任何问题,请告诉我 这来得正是时候!我会给它打一针,然后再报告。它确实有效!而且要快得多。我没有精确地进行测量,但测量时间从20多秒增加到了5秒。Meta/MetaType.cs和ValueMember.cs-对于CF.2,没有GetRawConstantValue()。帮助的precompile.exe-h不起作用,-h:起作用。显然,它不喜欢输入的完整路径(C:\…),因为它错误地将C:作为参数处理。@HelloSam这些都应该现在修复