.NET C#基础教程第19天:堆栈与堆分配

作者:微信公众号:【架构师老卢】
6-10 9:24
32

概述:介绍本文演示了用于充满活力和高性能的应用程序的内存分配的想法。内存分配主要有两种类型,即堆栈与堆,它们在应用程序使用资源的方式中起作用,此外,应用程序的速度和响应速度也很重要。学习目标什么是堆分配什么是堆栈分配限制堆分配对象的使用开发人员的先决条件基本了解 C# 编程语言。开始什么是堆分配?堆内存主要用于动态分配,其中在编译时不会预测分配的大小和生命周期。引用类型实例(如 C# 中的对象和数组)存储在堆中。什么是堆栈分配?堆栈是内存的一部分,用于存储值类型和指向堆分配对象的指针。堆栈上的内存分配速度很快,因为它只涉及移动堆栈指针。限制堆分配对象的使用尽可能选择堆栈分配或使用值类型,以最大程度地

介绍

本文演示了用于充满活力和高性能的应用程序的内存分配的想法。内存分配主要有两种类型,即堆栈与堆,它们在应用程序使用资源的方式中起作用,此外,应用程序的速度和响应速度也很重要。

学习目标

  • 什么是堆分配
  • 什么是堆栈分配
  • 限制堆分配对象的使用

开发人员的先决条件

  • 基本了解 C# 编程语言。

开始

什么是堆分配?

堆内存主要用于动态分配,其中在编译时不会预测分配的大小和生命周期。引用类型实例(如 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

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:44735,如:code:44735 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
阅读排行