if (!someList.Contains(new listItem(arg1, args2)))
{
// Do some stuff
}
Run Code Online (Sandbox Code Playgroud)
对于上面的代码段,someList是结构列表并且listItem是结构.
在此上下文中使用new运算符会导致内存泄漏吗?或者这是一般的不良做法的一个例子?我搜索了SO和Google,但未能找到专门针对此问题的问题.
你必须非常努力地在C#中创建内存泄漏.这是可能的,但是偶然发生的情况并不多(除了与没有这种简单的内存管理的其他语言交互时).我不会在这里讨论边缘情况.
以下是该对象的内存:
Contains返回参数时,它的调用栈将被"释放",所以我们现在回到只有一个变量.即使使用new关键字,也不会在堆上创建结构.它仍然在堆栈上创建.在C#new中,在显式调用任何构造函数时使用(禁止反射),并且不指示堆上的分配(例如,在C++中的方式).
值得一提的是,即使这是一个类,而不是一个结构,它也不会导致任何内存泄漏.该对象最终将在堆上,但垃圾收集器将在不再需要它之后的某个时刻进行清理.你没有在这里做任何事情会导致一旦不需要就保持对象的引用(我知道Contains不会做任何会阻止它被收集的恶作剧;如果它是一些未知的功能它是可能但不太可能他们做某事意味着什么).
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |