【发布时间】:2016-10-12 03:04:53
【问题描述】:
我有一个关于性能和最佳实践的一般性问题。
当使用来自不同类的列表(或任何其他数据类型)时,哪种做法更好?在开始时复制,与本地合作,然后将其重新复制到原件,还是总是访问原件?
一个例子:
访问原文:
public class A
{
public static List<int> list = new List<int>();
}
public class B
{
public static void insertString(int i)
{
// insert at right place
int count = A.list.Count;
if (count == 0)
{
A.list.Add(i);
}
else
{
for (int j = 0; j < count; j++)
{
if (A.list[j] >= i)
{
A.list.Insert(j, i);
break;
}
if (j == count - 1)
{
A.list.Add(i);
}
}
}
}
}
如您所见,我多次访问原始 List A.list。这里是替代方案:
复制:
public class A
{
public static List<int> list = new List<int>();
}
public class B
{
public static void insertString(int i)
{
List<int> localList = A.list;
// insert at right place
int count = localList.Count;
if (count == 0)
{
localList.Add(i);
}
else
{
for (int j = 0; j < count; j++)
{
if (localList[j] >= i)
{
localList.Insert(j, i);
break;
}
if (j == count - 1)
{
localList.Add(i);
}
}
}
A.list = localList;
}
}
在这里,我只访问了另一个类中的列表两次(在开头获取它并在结尾设置它)。哪个会更好。
请注意,这是一个一般性问题,算法只是一个示例。
【问题讨论】:
-
我很确定,在这两个示例中,您使用的是相同的列表,即使在第二个示例中,您也直接将 localList 分配给 A.list。由于它们是引用类型,我会假设它们是完全相同的列表。要使 localList 成为真正的第二个列表,您需要添加 ... List
localList = A.list.ToList();或迭代 A.list 中的每个项目并将每个项目添加到 localList 之前。 -
感谢迈克尔的回答。我没想到列表是引用类型。我假设因为它是一个引用类型,所以使用 A.list 而不是本地列表会更快,因为我不需要复制 A.list 中的所有元素。对吗?
标签: c# performance list class copy