作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用反射找到我项目中所有继承自 Packet.Base 的类
这些类中的每一个都应用了 ProtoBuf 属性。
我刚刚经历过Protobuf.net Exception - Timeout while inspecting metadata我的项目,并希望实现 PrepareSerializer 而不必通过并在其中添加所有不同的类类型。
有没有一种简单的方法可以让我动态地准备类,因为我有来自反射的类型而无需调用
ProtoBuf.Serializer.PrepareSerializer(Of Instruction)()
ProtoBuf.Serializer.PrepareSerializer(Of NoOperation)()
或添加一个
Public MustOverride Sub Prepare()
到基类再到每个类
Public Overrides Sub Prepare()
Serializer.PrepareSerializer(Of TimeSynchronise)()
End Sub
这是我正在使用的加载机制,一个非常简单的反射加载。
Public Class CompatiblePackets
Inherits Dictionary(Of Packet.PacketType, Base)
Public Sub New()
Dim theAssembly As Assembly = Assembly.GetExecutingAssembly
For Each t As Type In theAssembly.GetTypes
If t.BaseType Is GetType(Base) Then
Dim p As Base = CType(t.Assembly.CreateInstance(t.FullName), Base)
Me.Add(p.PacketTypeIndicator, p)
End Try
End If
Next
End Sub
public sub Prepare
ProtoBuf.Serializer.PrepareSerializer(t)()
end sub
最佳答案
是的,你可以在没有泛型的情况下调用它:
RuntimeTypeModel.Default[type].CompileInPlace();
哪里:
RuntimeTypeModel.Default
是默认类型模型,这是 Serializer.*
方法使用的(v2 支持并行独立类型模型)[type]
索引器使用默认行为(属性)执行和隐式Add
,从而完成大部分元数据分析CompileInPlace()
对该类型进行 IL 优化您也可以尝试稍微增加 RuntimeTypeModel.Default.MetadataTimeoutMilliseconds
。
关于protobuf-net - 在没有通用类的情况下调用 PrepareSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9833794/
我使用反射找到我项目中所有继承自 Packet.Base 的类 这些类中的每一个都应用了 ProtoBuf 属性。 我刚刚经历过Protobuf.net Exception - Timeout whi
我假设它会查看您的模型并以某种方式准备好,这样您的前几个序列化就不会减慢。如果我的消息模型有一个带有子类的消息类怎么办?将我的父类放在类型参数中是否也为所有子类做好准备? 最佳答案 (这个答案假设 p
我是一名优秀的程序员,十分优秀!