只是想知道哪一个最适合练习?
代码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方法,只使用类推送器的实例。
如果可能的话,你可以找一些参考资料来研究代码优化吗
答案 0 :(得分:2)
编码方法的第一种和第二种方法是相同的。局部变量是立即定义和使用的;没有其他地方使用serializer
。
第三种编码方式在serializer
的多个调用中重用pusher
。它不会多次调用JavaScriptSerializer
的构造函数,因此可能更有效。
您可以通过制作JavaScriptSerializer
变量pusher
在所有类serializer
中共享static
。除非您动态更改配置,例如通过调用RegisterConverters
,否则您可以进一步减少构造函数的调用次数。
答案 1 :(得分:1)
我认为代码1和代码2没有太大区别。如果你多次使用push方法,那么使它成为类级变量而不是本地/方法级变量
答案 2 :(得分:1)
最好的办法是衡量绩效。
我真的怀疑你会看到很多不同,如果有的话。在方法中创建对象时,它将在方法结束时超出范围并有效地进行GC。
如果您将JavaScriptSerializer声明为类的字段,则需要确保它是线程安全的,如果您将同时调用它。