变量,在类或方法中哪个更好?

时间:2013-05-31 02:04:27

标签: c# performance optimization coding-style

只是想知道哪一个最适合练习?

代码1:

public void push<T>(T pushthis)
{
    pusher pusher = new pusher();
    pusher.push(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(pushthis));
}

代码2:

public void push<T>(T pushthis)
{
    pusher pusher = new pusher();
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    pusher.push(serializer.Serialize(pushthis));
}

代码3:

public class pusher()
{
    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();

    public void push<T>(T pushthis)
    {
       pusher pusher = new pusher();                
       pusher.push(serializer.Serialize(pushthis));
    }
}

我想知道是否更好地为序列化器创建一个变量,如果是,在哪里放置它,在方法内部或类内部 我将多次使用push方法,只使用类推送器的实例。

如果可能的话,你可以找一些参考资料来研究代码优化吗

3 个答案:

答案 0 :(得分:2)

编码方法的第一种和第二种方法是相同的。局部变量是立即定义和使用的;没有其他地方使用serializer

第三种编码方式在serializer的多个调用中重用pusher。它不会多次调用JavaScriptSerializer的构造函数,因此可能更有效。

您可以通过制作JavaScriptSerializer变量pusher在所有类serializer中共享static。除非您动态更改配置,例如通过调用RegisterConverters,否则您可以进一步减少构造函数的调用次数。

答案 1 :(得分:1)

我认为代码1和代码2没有太大区别。如果你多次使用push方法,那么使它成为类级变量而不是本地/方法级变量

答案 2 :(得分:1)

最好的办法是衡量绩效。

我真的怀疑你会看到很多不同,如果有的话。在方法中创建对象时,它将在方法结束时超出范围并有效地进行GC。

如果您将JavaScriptSerializer声明为类的字段,则需要确保它是线程安全的,如果您将同时调用它。