传递复杂数据与传递其属性

时间:2014-08-04 17:44:26

标签: c# properties

我知道这是一个基本问题,但我想知道它们之间的一些关键细节,以及它如何影响性能!

下面是一个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个函数fun1fun2

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));

我想知道这会影响性能的方式。

也欢迎提示和建议。

1 个答案:

答案 0 :(得分:2)

了解正确答案的唯一方法是使用工具来配置代码,并查看您的程序实际花费的时间。在此之前,您只是在进行猜测和预成熟优化。

但是,假设您已经构建了这些对象,我倾向于选择fun1()选项。这是因为它传递了对内存中相同对象的引用。 fun2()选项需要复制整数ID。由于引用的大小与整数相同,我希望复制整数与复制引用的工作量大致相同。那部分是洗。

但是,通过保留引用,您可以保存基于ID查找整个对象的后续步骤。这应该简化您的代码,使其更易于阅读和维护,并节省计算机的工作(提高性能)。

另外,想象一下你的财产是一个大于整数的东西......比方说,一个字符串。在这种情况下,传递对象可能是巨大的性能获胜。但同样,我所期待的只是一个天真的猜测而没有真正的分析工具的结果。