我正在创建一些我作为参数发送的对象。有人告诉我,最好使用第二块代码,因为它不会占用像我的代码块那么多的内存。 他们之间有什么区别?
object[] methodParameters = new object[] {
new Dictionary<string, string>() { { "port", parameters["port"] }, { "message", Settings.RELAY_1_2_OFF_OFF } },
null,
null
};
//...some code...
methodParameters = new object[] {
new Dictionary<string, string>() { { "port", parameters["port"] }, { "message", Settings.RELAY_3_4_OFF_OFF } },
null,
null
};
这一个。
object[] methodParameters = new object[3];
methodParameters[0] = new Dictionary<string, string>() { { "port", parameters["port"] }, { "message", Settings.RELAY_1_2_OFF_OFF } };
methodParameters[1] = null;
methodParameters[2] = null;
//...some code..
methodParameters[0] = new Dictionary<string, string>() { { "port", parameters["port"] }, { "message", Settings.RELAY_3_4_OFF_OFF } };
methodParameters[1] = null;
methodParameters[2] = null;
答案 0 :(得分:1)
在第一个代码块中,第一个实例化将占用内存中的一个位置。第二个实例化将占用内存中的不同位置,最终垃圾收集器将清理第一个实例化。
在第二个代码块中,只有一个数组的实例化,并且数组的元素被覆盖。
在这两个块中,为索引0实例化的Dictionary将占用内存中的一个位置,然后当&#34; new&#34;字典被实例化它将占用内存中的不同位置,最终垃圾收集器将清理字典的第一个实例。
我会说第一个代码块将暂时&#34;在垃圾收集器开火之前占用更多内存。
答案 1 :(得分:0)
想象一下,第二个代码块可以轻松编写为:
methodParameters
它看起来与原版非常相似,但它包含一个令人讨厌的潜伏错误 - 我们最终得到//...some code..
有效地包含与Dictionary
之前相同的数据。因此,为了单个数组分配,我们已经交换了清晰,可读的代码,完全忽略了我们仍然具有相同数量的posBg();
$(window).resize(function() {
posBg();
})
function posBg(){
var posLeft=$('#about-stat').offset().left;
var posTop=$('#about-stat').offset().top;
$('#about-stat').css("background-position", posLeft+"px "+posTop+"px");
}
分配,并且这些字典也可以具有任意数量的内部分配。 / p>
正如我所说,编写 clear ,可理解的代码,然后 profile 代码,找出的好处到哪里考虑减少内存使用量 - 并确保以不容易引入错误机会的方式执行此操作。
我几乎保证不会在这里找到它。