性能:int vs. byte与custom int

时间:2014-02-01 16:33:24

标签: c# performance

我正在编写一个程序,其中我需要一些值,总是一个0到255之间的值,我想把它们限制在255,可以这么说。我想知道我最好的选择是什么,表现明智:

  • int,我必须在整个代码中进行大量检查
  • byte,会抛出异常,所以我仍然需要检查
  • custom int,可以编程为自动修剪值或将其增加到我想要的,但可能缺乏性能(不确定)

哪种选择最适合我的情况? (也欢迎其他建议)

1 个答案:

答案 0 :(得分:3)

对于这样的事情,我的第一个想法不是关于性能而是关于可用性。如果没有更好地理解您的代码,很难确定性能影响,最终分析器将成为变化的真正判断。相反,我会专注于使其易于使用,然后测试该解决方案的性能。

这里有一个自定义类型似乎并不合理。据推测,您希望将每个单独的操作限制在255,而不是限制最终结果。例如255 + 100 - 50应该等于205而不是255.如果是这样,自定义类型是您最好的选择并且可以沿着这些线实现

struct MyInt {
  public readonly int Value;

  public MyInt(int value) {
    Value = Math.Min(value, 255);
  }

  public static MyInt operator+(MyInt left, MyInt right) {
    return new MyInt(left.Value + right.Value); 
  }

  public static MyInt operator-(MyInt left, MyInt right) { 
    return new MyInt(left.Value - right.Value);
  }

  // etc ...
}

关于这种类型的注意事项,您还应考虑实施IComparableIComparable<T>IEquatable<T>等接口