效率方面的全局变量与局部变量分配
本文关键字:局部变量 分配 全局变量 方面 效率 | 更新日期: 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%。