【问题标题】:Protobuf-net Gendarme ErrorsProtobuf-net 宪兵错误
【发布时间】:2013-05-09 04:07:11
【问题描述】:

最近遇到了 protobuf-net,很棒的库。

我通过gendarme 运行它,它提出了许多性能通知,例如:

目标:System.Int32 ProtoBuf.ProtoReader::ReadFieldHeader() 程序集: protobuf-net,版本=1.0.0.0,文化=中性, PublicKeyToken=null

严重性:高置信度:高来源:调试符号 不可用,IL 偏移 0x0055 详细信息:类型“System.Int32”正在 盒装。

如果有人在宪兵方面有经验,这些通知有多重要,我是否可以通过尝试清理任何 严重性:高问题来回馈 protobuf-net?

【问题讨论】:

  • 猜猜这取决于你真正想要做什么。 Marc 提供了源,如果您担心查看源不是更有效吗?您也可以随时从下载/NuGet 获取 PDB ..yourproject\packages\protobuf-net.2.0.0.621\lib\net40 项目中也有很多测试。
  • 我可以在一两天内看看(刚从长途飞行回来) - 但是:它可能是误报:protobuf-net 实际上作为双重代码库存在:一个反射模型一个元编程模型。它尽其所能,这通常意味着元编程模型。可能是它在抱怨反射模型(必然效率较低)。但是:我去看看。顺便说一句,PDB 完全可用 - 它应该可以访问调试符号
  • 有关信息,我已经通过这些;他们都不是特别引人注目,但我做了一些整理以使宪兵更快乐 - 但坦率地说,他们是误报真的。它捕获的唯一值得注意的是一个地方我有错误的#if 标记,这意味着自定义异常不是二进制格式化程序可序列化的。不完全是一个关键点。

标签: c# protobuf-net gendarme


【解决方案1】:

你引用的具体错误来自:

if(fieldNumber < 1) throw new ProtoException(
    "Invalid field in source data: " + fieldNumber);

所以,是的,从技术上讲,这是一个不必要的盒子 - 但是,这是一个极端的极端情况,值得关心(如果你遇到这个例外,你有比盒子更大的问题)。不过,如果它引起您的关注,可以修复它。

还可能会从反射实现中引发一些进一步的错误 - 这会产生误导,因为在大多数情况下实际上并未使用(代码同时具有反射模型和元编程模型)。

我的目标是看看下周宪兵所说的话:update - done - 请注意,其中大部分基本上是“忙碌的工作” - 它并没有真正改变任何重要的事情,除了让宪兵高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多