很抱歉提出这么简单的问题,但想澄清一个概念。
下面是我的代码,我在for循环中创建一个字典
if(condition)
{
// some code here
for(int i=0; i<length; i++)
{
Dictionary<string, string> parameter = new Dictionary<string, string>();
parameter.Add("ServiceTypeID", "1");
parameter.Add("Description", "disc");
}
}
每次我应该在for循环之前创建字典对象并在字典对象上应用clear方法,而不是创建字典对象,如
if(condition)
{
Dictionary<string, string> parameter = new Dictionary<string, string>();
// some code here
for(int i=0; i<length; i++)
{
parameter.clear();
parameter.Add("ServiceTypeID", "1");
parameter.Add("Description", "disc");
}
}
在这两个选项中,哪个选项会更好。
谢谢, 零
答案 0 :(得分:2)
在大多数实际情况中,差异接近于零。
有人可能会认为清除数据结构比初始化空数据更快。这并非总是如此。请注意,现代语言(C#,Java)内存管理器已经过优化,可以分配许多小对象(这与垃圾收集器的工作方式有关)。在C ++中,由于缺少GC,内存管理器被调整为分配少量大对象。因此,在循环内重构字典与清除它是相当的(性能方面)。
此外,clear()可能不一定释放所有已分配的内存。它可能只是重置一些指针/索引。因此,如果使用clear(),您的Dictionary可能仍会占用大块内存,这可能会降低代码的其他部分的速度。
结论:除非剖析器告诉您这是您程序的瓶颈,否则不要担心。
答案 1 :(得分:0)
如果这两种解决方案都适合你,你应该记住两件事:
答案 2 :(得分:0)
在性能方面,很明显,第二个循环更好,因为你只创建一个对象,然后在循环中添加项目。
但是在第一个循环中,参数变量没有用,因为在for的结尾它不再存在...
同样在第二个循环中你有同样的问题......如果该引用不可用那么......