在效率方面哪种方式更好,假设下面代码中的m_eligibleCustomers
相当大,对效率产生影响。
全局声明它并在创建对象时为变量赋值,并让它保持不变直到对象超出范围。或者仅在方法内部分配值(假设有3个方法需要20个),并非所有方法都可以调用,可能属于不同的事件代码,因此一旦方法结束就释放内存范围。
我个人喜欢全球化,在第一次使用时分配价值,并重复使用,但如果对象相当大,这是一个正确的决定吗?更多我认为,我觉得在一个方法范围内宣称似乎是一个好主意。在上面的场景中选择什么是更好的选择?
internal class Program
{
private DataSet m_CustomerSet;
private IEnumerable<Customer> m_eligibleCustomers;
public Program()
{
m_CustomerSet = GetDataSetFromCache();
m_eligibleCustomers = GetEligibleCustomers(customerSet);
}
private void OnClick(object sender, EventArgs e)
{
MethodA(eligibleCustomers); //OR MethodA(customerSet) and do calculation with in the method
//and object is destroyed as soon as the method is completed
MethodB();
MethodC();
MethodD();
MethodE();
MethodF();
MethodG(eligibleCustomers);
MethodH();
}
}
答案 0 :(得分:0)
是保持全局,因为你每次都需要调用DB,但是gobal变量是旧学校,使用缓存存储这些对象,特别是如果它是web应用程序,所以你可以设置过期日期等等。
答案 1 :(得分:0)
如果你想要效率去获得C或汇编程序。否则有效地编写算法。在最坏的情况下,放弃递归并将其替换为(可能更复杂的)循环 - 但绝不要微观优化这些东西。
以干净的方式编写代码,以便您能够在一年内理解它,这比您可能获得的任何性能提示更具价值,而解决方案可能会提高0,0001%。