就效率而言,全局变量与局部变量分配

时间:2014-09-16 21:21:14

标签: c# .net performance oop

在效率方面哪种方式更好,假设下面代码中的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();
    }
}

2 个答案:

答案 0 :(得分:0)

是保持全局,因为你每次都需要调用DB,但是gobal变量是旧学校,使用缓存存储这些对象,特别是如果它是web应用程序,所以你可以设置过期日期等等。

答案 1 :(得分:0)

如果你想要效率去获得C或汇编程序。否则有效地编写算法。在最坏的情况下,放弃递归并将其替换为(可能更复杂的)循环 - 但绝不要微观优化这些东西。

以干净的方式编写代码,以便您能够在一年内理解它,这比您可能获得的任何性能提示更具价值,而解决方案可能会提高0,0001%。