本文演示了用于充满活力和高性能的应用程序的内存分配的想法。内存分配主要有两种类型,即堆栈与堆,它们在应用程序使用资源的方式中起作用,此外,应用程序的速度和响应速度也很重要。
堆内存主要用于动态分配,其中在编译时不会预测分配的大小和生命周期。引用类型实例(如 C# 中的对象和数组)存储在堆中。
堆栈是内存的一部分,用于存储值类型和指向堆分配对象的指针。堆栈上的内存分配速度很快,因为它只涉及移动堆栈指针。
尽可能选择堆栈分配或使用值类型,以最大程度地减少垃圾回收的需要。
每次调用该方法时,以下方法都会在堆上创建一个新的字符串对象,该对象也将每次调用垃圾回收。
private string GetUserName(int index)
{
// Inefficient: Creates a new string object on the heap
return new string($"User{index}".ToCharArray());
}
通过返回不带关键字的插值字符串,可以避免不必要的堆分配,并减少对垃圾回收的影响,从而获得更好的性能。new
private string GetUserName(int index)
{
// Efficient: Avoids unnecessary heap allocation
return $"User{index}";
}
创建另一个名为的类,并添加以下代码片段StackVsHeap
public static class StackVsHeap
{
public static string InefficientMethod(int index)
{
// Inefficient: Creates a new string object on the heap
return new string($"User{index}".ToCharArray());
}
public static string EfficientMethod(int index)
{
// Efficient: Avoids unnecessary heap allocation
return $"User{index}";
}
}
从 main 方法执行,如下所示
#region Day 19: Stack vs. Heap Allocation
static string ExecuteDay19()
{
StackVsHeap.InefficientMethod(0);
StackVsHeap.EfficientMethod(0);
return "Executed Day 19 successfully..!!";
}
#endregion
控制台输出
User0
User0
源代码获取:公众号回复消息【code:44735
】