Pon*_*oni 2 c# memory-management
说我有这个C#类:
public class HttpContextEx
{
public HttpContext context = null;
public HttpRequest req = null;
public HttpResponse res = null;
}
Run Code Online (Sandbox Code Playgroud)
如何在函数内声明它的对象,它将在堆栈上而不是在堆上分配?
换句话说,我想避免对此使用'new'关键字.这段代码很糟糕:
HttpContextEx ctx = new HttpContextEx(); // << allocates on the heap!
Run Code Online (Sandbox Code Playgroud)
我知道什么堆栈/堆是完美的,我听说过很棒的C#GC,但我坚持在堆栈上分配这个微小的对象,这只是为了方便起见.
这种态度来自C++(我的主要工具)所以我不能忽视这一点,我的意思是它真的毁了我这里的乐趣(:
Fem*_*ref 11
你不能(也不应该)这样做.即使你使用a struct(将被放在堆栈中),你也必须使用new运算符来包含类.严肃地说,如果你换成另一种语言,也要改变你的态度.
如果您使用struct并在方法体内创建新实例将其更改为值类型,它将在堆栈上创建它.但是,成员,因为它们是引用类型仍将在堆上.无论是值还是引用类型的语言仍然需要new运算符,但您可以使用它var来消除类型名称的双重使用
var ctx = new HttpContextEx();
Run Code Online (Sandbox Code Playgroud)
否则,按照原样使用C#,因为GC做得很好.