C#实例化和静态类对象调用对比

目录
  • 1、对比效果
  • 2、实例化代码
  • 3、静态类代码

前言:

在编程时,什么时候用实例化对象,什么时候用静态类对象,这个值得我们思考,它们之间所占的内存和生命周期又是如何,框架本身的回收机制是什么

1、对比效果

实例化对象不断调用多少次,都会重新初始化值调用,说明实例化对象的生命周期是调用完成后就结束

静态类对象,静态类下的静态成员会一直占用在内存且只实例化一次,说明静态类成员的生命周期是从调用到程序结束或机制回收

场景使用:

  • 1)静态类或成员:数据库连接字符串,可以定义为静态,调用和获取比较频繁
  • 2)实例化:登录操作,一般登录操作不会太频繁

  • 重新启动对应的IIS站点

在不停的刷新某一个页面时,内存是按规律的0.1MB增加 ,刷新到一定次数后,内存没有明显的增加,甚至是不变,下图的.NET Core Host进程有两个,是指两个站点,且有被外部或内部在调用,否则是不显示状态

2、实例化代码

public string init = "实例化:hello";
public bool flag = false;
public int num = 0;
public void Test(string one)
{
    string test = "";

    if (!flag)
    {
        flag = true;

        num += 1;
        test = "【首次输出】" + init + one + num;
    }
    else
    {
        num += 1;
        test = init + one + num;

    }

    LmyLogHelper.Debug(test);
}

3、静态类代码

public static string init = "静态式:hello";
public static bool flag = false;
public static int num = 0;
public static void Test(string one)
{
    string test = "";

    if (!flag)
    {
        flag = true;

        num += 1;
        test = "【首次输出】" + init + one + num;
    }
    else
    {
        num += 1;
        test = init + one + num;

    }

    LmyLogHelper.Debug(test);
}

到此这篇关于C#实例化和静态类对象调用对比的文章就介绍到这了,更多相关C#实例化和静态类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解C#实例化对象的三种方式及性能对比

    前言 做项目过程中有个需求要实例化两万个对象并添加到List 中,这个过程大概需要1min才能加载完(传参较多),于是开启了代码优化之旅,再此记录. 首先想到的是可能实例化比较耗时,于是开始对每种实例化方式进行测试,过程如下 实例化方式 1.用 New 关键字实例化一个类 2.用 Activator 实例化一个类 3.用 Assembly 实例化一个类 代码实现 测试环境: vs2019 .NET Framework 4.7 Intel Core i7-10510U CPU 首先定义一个类Per

  • C#中的静态成员、静态方法、静态类介绍

    1.静态成员.实例成员 1.1定义及说明 数据成员: 静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问. 实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在. 函数成员: 静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量和静态方法:静态方法不可以直接访问实例变量和实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态

  • 浅析C#静态类,静态构造函数,静态变量

    静态变量 静态变量位于栈上,它是一个全局变量,在编译期就已经生成. public class Cow { public static int count; private int id; public Cow() { id = ++count; } } 客户端创建2个Cow的实例,并打印静态变量count. static void Main(string[] args) { Console.WriteLine(Cow.count); Cow cow1 = new Cow(); Cow cow2

  • C# 泛型类(函数)的实例化小例子

    泛型可以用于类,也可以用于函数.如 泛型类: 复制代码 代码如下: public class MyClass<T> {     public T MyElement { get; set; } } 泛型函数: 复制代码 代码如下: public T ReturnElement<T>() {     throw new NotImplementedException(); } 但是当需要对MyElement进行实例化的时候,却不能使用new(),只要添加如下代码即可进行实例化了: 泛

  • C#中静态方法和实例化方法的区别、使用

    1.定义方法的格式 访问修饰符 返回类型 方法名 (参数列表) { // 方法的主体- } 2.静态方法 在大多数时候,我们定义写一个方法,会把方法区分为实例化方法(普通方法)和静态方法. 用static修饰一个方法,就是静态方法. public string InstanceMethod()//定义一个实例化方法(普通方法) { return "实例化方法(普通方法)"; } public static string StacticMethod()//定义一个静态方法 { retur

  • c#中单例类与静态类的区别以及使用场景

    前言 哈哈,我来了,我又来了,在这年关将至的时候,趁有时间,就多学习和温习点老的知识.我们在.net core开发中,会经常使用注入来注入一个单例类,而在没有注入的时候,大部分情况会自己实现一个单例类,或者更简单的就是实现一个静态类.而常常在使用中,都能完成特定的目的,然而它们间的区别是什么呢? 1.设计模式:单例模式 单例模式:属于设计模式中创建类型的模式,通过单例模式的方法创建的类,在当前程序中只有一个实例,当然可以实现为线程安全的单例. 这里简单复习下创建代码: 1.1 使用时分配, 使用

  • C# 实例化接口对象的方法

    在head first 设计模式中 用到了很多很多接口对象 首先澄清一个问题,就是接口不仅可以声明对象,而且可以把对象实例化,还可以当做参数被传入. 一.接口回调 这就是继承中的向上转型.父类 FL=new 子类():只不过这里的父类就是interface接口.(个人认为这里不管是class的override还是interface的重写,都是一样的用法) 可以把实现某一接口类创建的对象的引用赋给该接口声明的接口变量,那么该 接口变量就可以调用被类实现的接口中的方法.实际上,当接口变量调用被类实现

  • 举例讲解C#编程中委托的实例化使用

    合并委托 本示例演示如何创建多播委托. 委托对象的一个有用属性是:可以使用 + 运算符将多个对象分配给一个委托实例.多播委托包含已分配委托的列表.在调用多播委托时,它会按顺序调用列表中的委托.只能合并相同类型的委托. - 运算符可用于从多播委托中移除组件委托. using System; // Define a custom delegate that has a string parameter and returns void. delegate void CustomDel(string

  • C#实例化和静态类对象调用对比

    目录 1.对比效果 2.实例化代码 3.静态类代码 前言: 在编程时,什么时候用实例化对象,什么时候用静态类对象,这个值得我们思考,它们之间所占的内存和生命周期又是如何,框架本身的回收机制是什么 1.对比效果 实例化对象不断调用多少次,都会重新初始化值调用,说明实例化对象的生命周期是调用完成后就结束 静态类对象,静态类下的静态成员会一直占用在内存且只实例化一次,说明静态类成员的生命周期是从调用到程序结束或机制回收 场景使用: 1)静态类或成员:数据库连接字符串,可以定义为静态,调用和获取比较频繁

  • thinkphp5 模型实例化获得数据对象的教程

    模型对象和数据对象理解 1. 模型对象:模型类实例化后获得的对象: 2. 数据对象:获取到了原始数据的模型对象: 原始数据:存放在模型对象的$data属性中($data是一个数组) 数据对象:说到底,还是一个模型对象,千万不要认为是一个全新的对象 DB操作返回是数组. 模型直接操作返回是对象. //该对象共计有28个受保护属性,必须在本类或子类中使用,外部不能直接使用 object(app\index\model\Staff)#5 (28) { //数据库配置数组 ["connection&qu

  • C#将配置文件appsetting中的值转换为动态对象调用

    配置如下: <!--邀请用户送优惠券规则{邀请人规则:[{邀请人:优惠券ID}],使用邀请码人:优惠券ID},按照邀请人数从小到大配置--> <add key="INVITE_USER_RULE" value='{"InviteUser":[{"InvitePersonsCount":1,"CouponID":54},{"InvitePersonsCount":3,"Coupon

  • Java实例化一个抽象类对象的方法教程

    前言 最近在学习的过程中,发现了一个问题,抽象类在没有实现所有的抽象方法前是不可以通过new来构建该对象的,但是抽象方法却是可以有自己的构造方法的.这样就把我搞糊涂了,既然有构造方法,又不可以通过new来创建,那么抽象类在没变成具体类的时候究竟可不可以实例化呢? 在Java 中抽象类是不能直接被实例化的.但是很多时候抽象类的该特点成为一个比较麻烦的阻碍.例如如果我想使用动态代理来给一个抽象类赋予其执行抽象方法的能力,就会有两个困难:1. 动态代理只能创建实现接口的一个代理对象,而不能是一个继承抽

  • ASP.NET(AJAX+JSON)实现对象调用

    客户端: 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ASP.NETA_JAX.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www

  • C#中方法的直接调用、反射调用与Lambda表达式调用对比

    想调用一个方法很容易,直接代码调用就行,这人人都会.其次呢,还可以使用反射.不过通过反射调用的性能会远远低于直接调用--至少从绝对时间上来看的确是这样.虽然这是个众所周知的现象,我们还是来写个程序来验证一下.比如我们现在新建一个Console应用程序,编写一个最简单的Call方法. 复制代码 代码如下: class Program {     static void Main(string[] args)     {             } public void Call(object o

  • java中对象调用成员变量与成员实例方法

    使用对象访问类中的成员: 对象名.成员变量: 对象名.成员方法(); 成员变量的默认值: 具体实例代码: public class StudentTest_01 { public static void main(String[] args) { //创建对象格式,类名 对象名 = new 类名(); //无参数使用方法 Student s2 = new Student(); s2.setName("千寻1"); s2.setAge(25); System.out.println(&q

  • ES6学习笔记之map、set与数组、对象的对比

    前言 ES5中的数据结构,主要是用Array和Object.在ES6中主要新增了Set和Map数据结构.到目前为止,常用的数据结构有四种Array.Object.Set.Map.下面话不多说了,来一起看看详细的介绍吧. // 数据结构横向对比,增,查,改,删 1.map和数组对比 { let map=new Map(); let array=[]; /**增**/ map.set('t',1); array.push({t:1}); console.info('map-array',map,ar

  • Java全面分析面向对象之多态

    目录 多态的理解 向上转型 向上转型的三种形式 动态绑定和静态绑定 方法的重写 进一步认识和理解多态 多态的优点 多态的理解 什么是多态呢??从字面理解就是多种形态,也就是不同类实例化出来的对象调用同一种方法,也可以理解为不同类的对象经过同一种行为产生的状态是不同的,这就是多态. 要想理解多态,我们必须要了解向上转型和重写这两个重点然后在来深刻理解多态这一概念,等看完向上转型与重写再来看多态的概念,你就会豁然开朗,一下就通透了不少.因为多态的条件就是向上转型,重写以及继承. 向上转型 首先多态的

  • 深入解析Python编程中super关键字的用法

    官方文档中关于super的定义说的不是很多,大致意思是返回一个代理对象让你能够调用一些继承过来的方法,查找的机制遵循mro规则,最常用的情况如下面这个例子所示: class C(B): def method(self, arg): super(C, self).method(arg) 子类C重写了父类B中同名方法method,在重写的实现中通过super实例化的代理对象调用父类的同名方法. super类的初始方法签名如下: def __init__(self, type1, type2=None

随机推荐