效率方面的全局变量与局部变量分配

本文关键字:局部变量 分配 全局变量 方面 效率 | 更新日期: 2023-09-27 18:22:02

假设下面代码中的m_eligibleCustomers相当大,会对效率产生影响,那么哪种方式在效率方面更好。

全局声明它,并在创建对象时为变量赋值,并让它一直保持到对象超出范围。或者只在方法内部分配值(假设20个方法中有3个需要它),并不是所有的方法都可以被调用,可能属于不同的事件代码,这样一旦方法超出范围,内存就会被释放。

我个人喜欢全局化,在第一次使用时赋值,并重用,但若对象相当大,那个么这是一个正确的决定吗?我认为,我觉得在方法的范围内声明似乎是个好主意。在上述情况下,选择哪种方案更好?

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

效率方面的全局变量与局部变量分配

是的,保持它的全局性,因为你每次都需要调用DB,但gobal变量是老派的,使用缓存来存储这样的对象,尤其是当它是web应用程序时,这样你就可以设置过期日期等。

如果你想提高效率,就去买C或Assembler。否则,高效地编写算法。在最坏的情况下,放弃递归,用一个(可能更复杂)循环代替它——但永远不要对这类事情进行微观优化。

以一种干净的方式编写代码,这样你就可以在一年内理解它,这比你可能获得的任何性能都更有价值,因为任何解决方案都可能快00001%。