C# - 如果我向一个类添加更多方法,每个实例会占用更多空间吗?

时间:2018-03-16 11:42:41

标签: c# performance

作为程序员,您始终可以选择向类添加方法或创建将该对象的类实例作为参数的相同方法。

这样做的一种方式是:

List<Car> Oldtimers = new List<Car>();    
class Car { 
   int speed; 
   int size;

   public bool IsBig(){
      return size >5;
   }

   public bool isFast(){
   return speed > 120;
   }
}

或者您也可以尝试节省空间

class CarCollection {
   List<Car2> Supercars = new List<Car2>();

    class Car2{ 
        public int speed; 
        public int size;
    }

    bool IsBig(Car2 car){
        return car.size > 5
    }

    bool isFast(Car2 car){
       return car.speed > 120;
    }
}

Car2实例现在实际占用的空间是否少于Car,因为没有附加方法?哪个列表更好?字节码中是否存在差异?

我还想知道标准是什么,或者是否存在一些我没有看到的性能问题。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

  

Car2实例现在实际占用的空间是否小于Car,b

没有

每个实例都有一个指向其类型的指针,以及附加到其上的一些其他信息 但即使使用虚拟方法,该开销也是固定的。

只有字段占用实例内的空间。

答案 1 :(得分:0)

如果您确实需要为每个实例保存字节,则可以切换到存储数据的结构列表,并具有访问数据的管理器类,如示例所示。棘手的部分是汽车被拆除。您还可以查看使用较小的数字类型,如short或byte。这是一个例子:

function yesnoCheck() {
  var markWrap1 = $('#MarkWrap1');
  var markWrap2 = $('#MarkWrap2');
  var text = $('#tentext');
  var value;
  if ($('#switch_left').is(':checked')) {
    markWrap1.css('display', 'flex');
    markWrap2.css('display', 'none');
    value = +$('#tensliderm').slider("option", "value") / 12;
    text.val(String(value));
    $('#tenslidery').slider('value', value);
  } else if ($('#switch_right').is(':checked')) {
    markWrap2.css('display', 'flex');
    markWrap1.css('display', 'none');
    value = +$('#tenslidery').slider("option", "value") * 12;
    text.val(String(value));
    $('#tensliderm').slider('value', value);
  }
}