我知道这是一个基本问题,但我想知道它们之间的一些关键细节,以及它如何影响性能!
下面是一个C#示例。
假设我有一个Person类,其属性如
public class Person
{
int PersonIds{get;set;}
string Name{get;set;}
...
...
}
我在某处定义了
List<Person> myFamily; // I later initialize to contail all my family members.
现在我有2个函数fun1
和fun2
List<Person> fun1(List<Person> myFamily)
{
... // here some logic occurs and I get some less no. of Person in return list.
...
}
其他地方
List<Person> selectedPersons = fun1(myFamily);
VS
List<int> fun2(List<int> myFamilyPersonIds)
{
... // Here same logic occurs as fun1 but it only needs personID to perform it.
...
}
其他地方
List<int> selectedPersonIds = fun2(myFamilyPersonIds);
List<Person> selectedPersons = myFamily.where(a=>selectedPersonIds.contains(a.PersonId));
我想知道这会影响性能的方式。
也欢迎提示和建议。
答案 0 :(得分:2)
了解正确答案的唯一方法是使用工具来配置代码,并查看您的程序实际花费的时间。在此之前,您只是在进行猜测和预成熟优化。
但是,假设您已经构建了这些对象,我倾向于选择fun1()
选项。这是因为它传递了对内存中相同对象的引用。 fun2()
选项需要复制整数ID。由于引用的大小与整数相同,我希望复制整数与复制引用的工作量大致相同。那部分是洗。
但是,通过保留引用,您可以保存基于ID查找整个对象的后续步骤。这应该简化您的代码,使其更易于阅读和维护,并节省计算机的工作(提高性能)。
另外,想象一下你的财产是一个大于整数的东西......比方说,一个字符串。在这种情况下,传递对象可能是巨大的性能获胜。但同样,我所期待的只是一个天真的猜测而没有真正的分析工具的结果。