等于和ID比较之间的性能差异

时间:2015-05-21 23:47:38

标签: c# .net vb.net

obj.equals(obj2)object.ID == obj2.ID之间是否存在性能差异?我的理解是,equals将比ID之间的比较慢,特别是当数据集较大时,以及当我使用类似LINQ语句的东西寻找一个项目时

示例:

class Person {
    int Id,
    string Name
}

Person a = new Person (1,"Steve");
Person b = new Person (2,"Peter");

//Scenario 1
if (a.equals(b)) {Console.WriteLine("True");}

//Scenario 2
if (a.Id == b.Id) {Console.WriteLine("True");}

2 个答案:

答案 0 :(得分:4)

这完全取决于您的Equals方法的实施方式。如果不覆盖它,则默认行为是比较引用,因此具有相同ID的两个不同实例将不被视为相等。因此,这不仅仅是表现问题,也是正确性问题。

现在,假设您实现Equals以便它比较两个实例的ID:它将比ID直接慢一点(因为调用虚方法的开销),但差异将会可能太小而不明显。

答案 1 :(得分:2)

如果没有看到班级是否覆盖Equals,就无法说出哪一个更快。

默认情况下,如果类未覆盖Equals,则a.Equals(b)将执行对象ab的参考比较(即使对象具有false相同的.Id),而a.Id == b.Id执行Id的比较,如果被覆盖(如数字类型)将比较ID的值。

因此,在默认情况下,速度方面,这两个完全不同的操作中的第一个可能会快一点。