Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Performance Protobuf运行时和静态标记方法之间的开销有什么不同吗?_Performance_Tags_Runtime_Protocol Buffers_Protobuf Net - Fatal编程技术网

Performance Protobuf运行时和静态标记方法之间的开销有什么不同吗?

Performance Protobuf运行时和静态标记方法之间的开销有什么不同吗?,performance,tags,runtime,protocol-buffers,protobuf-net,Performance,Tags,Runtime,Protocol Buffers,Protobuf Net,我们正在.netcf目标上使用Probuf。一切正常。我开始使用静态[ProtoContract],[ProtoMember,1]。。等。我的同事们担心会给类对象增加潜在的开销,所以我切换到一个运行时模型,使用.add(#,“”),它似乎与所讨论的类更为“断开”。事实上,我更喜欢类中的静态标记,因为如果以后重构变量名,名称本身就会更新。因为我不知道protobuf在引擎盖下是如何工作的,或者做了什么,所以在开销、速度等方面,使用静态标签与运行时模型相比,有什么优势或劣势 谢谢 我没有详细介绍这方

我们正在.netcf目标上使用Probuf。一切正常。我开始使用静态[ProtoContract],[ProtoMember,1]。。等。我的同事们担心会给类对象增加潜在的开销,所以我切换到一个运行时模型,使用.add(#,“”),它似乎与所讨论的类更为“断开”。事实上,我更喜欢类中的静态标记,因为如果以后重构变量名,名称本身就会更新。因为我不知道protobuf在引擎盖下是如何工作的,或者做了什么,所以在开销、速度等方面,使用静态标签与运行时模型相比,有什么优势或劣势


谢谢

我没有详细介绍这方面的情况-主要是因为对属性的反射产生的任何开销都是一次性完成的。冷启动性能可能略有不同,但是:如果启动性能的最终目标是您的目标,那么您最好尝试使用google代码下载中提供的预编译器。此适用于属性模型,但其优点是使用预编译模型时,在运行时不会发生任何反射。它还将生成纯IL,因为CF通常受到非常严格的限制,所以IIRC的运行时使用被迫使用一些反射,甚至对于成员访问之类的事情。最后,这意味着您可以使用“CoreOnly”而不是“Full”构建,后者更小、更简单


无论如何,Protobuf.NET作者Marc Gravell给出了一个小小的回复:“您的代码[使用RuntimeTypeModel]只是显示了另一种配置它的方式。除非您明确关闭了自动编译,否则它应该以同样的方式执行。”我们在项目中传递了很多类,不知道在标记类中的变量时是否传递了一些东西。感谢您的回复。@user2864740在这种情况下,特别是针对cf,还有更多的话可以说……如果一个类被预先标记(非运行时),在正常(非protobuf)使用期间,类对象本身是否有任何附加项会随类一起传递。@user2824070否;元数据基本上是惰性的,除非代码通过反射积极地查看属性。例如,它当然没有每个实例的成本