C#泛型方法、传统方法与object传值性能的比较

C#泛型的“3大革命”:性能提升300%?代码错误归零? 摘要: C#泛型通过类型参数化解决了传统集合的性能与安全问题: 性能革命:List<T>避免装箱/拆箱,内存减少60%,CPU效率提升300%; 安全革命:编译期类型检查杜绝运行时InvalidCastException; 复用革命:泛型类(如GenericComparer<T>)替代重复代码,减少70%代码量。实战案例显示,泛型在亿级交易系统中将吞吐量从5000笔/秒提升至15万笔/秒。泛型在性能、安全性和可维护性上全面优于非泛型方案,是现代C#开发的核心利器。 (字数:149) 阅读详情

一、测试方法

分别对几种方法进行一亿次的循环,每次循环调用一次相应的方法。为了防止其他的误差,都使用空方法体。同时利用Stopwatch类计时。

三种方法如下:

        //传统方法
        static void N1(int a) { }
        //泛型方法
        static void N2<T>(T a) { }
        //使用object传值方法
        static void N3(object a) { }

二、测试主代码

public static void Main()
        {
            int a = 100;
            int t = 100000000;//每次循环1亿次

            Stopwatch sw = new Stopwatch();
            sw.Start();
            for(int i = 0; i < t; i++) { N1(a); }
            sw.Stop();
            Console.WriteLine("传统传值花费时间:{0}ms",sw.ElapsedMilliseconds);

            sw.Restart();
            for (int i = 0; i < t; i++) { N3(a); }
            sw.Stop();
            Console.WriteLine("采用object花费的时间:{0}ms", sw.ElapsedMilliseconds);

            sw.Restart();
            for(int i = 0; i < t; i++) { N2<int>(a); }
            sw.Stop();
            Console.WriteLine("采用泛型花费的时间:{0}ms", sw.ElapsedMilliseconds);
        }

三、结果

传统传值花费时间:275ms
采用object花费的时间:688ms
采用泛型花费的时间:289ms

四、分析

利用object进行传值时,经历了装箱与拆箱的操作,性能直接下降了一倍还多。

C#反射+泛型:3大核心技巧+5个实战场景,代码效率提升300%的秘密! 🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。 阅读详情

相关推荐

C#并发革命:用泛型和Channel模拟Go的Goroutine,性能提升300%

C#模拟Go并发编程实践:泛型+Channel实现高性能无锁队列 本文通过C#的泛型、Channel和ValueTask等技术,模拟Go语言的goroutine和channel并发模型。核心内容包括: 设计无锁任务池:基于Channel<T>和SemaphoreSlim实现类似goroutine的轻量级线程池 三大性能优化秘籍: 泛型通道避免装箱拆箱(性能提升300%+) 无锁队列优化(性能提升400%+) ValueTask<T>减少异步开销(性能提升400%+) 实战案例:构建高

java专栏 1073

C#关于JArray和JObject封装JSON对象

1、JObject:基本的json对象 /// <summary> /// Gets the j object. /// </summary> /// <returns><...

忆水思寒的博客 4417

C#泛型与集合类:掌握代码灵活性与性能优化的秘密武器

泛型是一种允许你定义类型参数化的类、接口或方法的技术,使得同一个逻辑可以适用于多种数据类型而无需重复编写相似的代码。例如,一个能够存储任何类型的列表结构,或是可以对任意两个元素进行比较的方法。使用泛型不仅提高了代码的可读性和维护性,还增强了编译时的类型检查能力,从而减少了运行时错误的发生几率。要创建一个泛型类,只需在类名后加上一对尖括号,并在其中指定一个或多个类型参数。上述例子展示了一个名为Box的容器类,它可以容纳任何类型的单个对象。这里的T就是类型参数,代表了未来实例化时所传入的具体类型。

墨夶的博客 1688

c#泛型的使用性能测试

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList,客户代码可以这样调用:MyList, MyList或 MyList。这避免了运行时类型转换或装箱操...

踏雪寻梅 1068

C# 泛型(Generic)

泛型(Generic)允许将类或方法中编程元素的数据类型规范进行延迟编写,直到在程序实际使用这些类或方法的时候再去确定具体的数据类型。

2401_83367969的博客 1220

C#泛型编程从入门到实战

类型参数是泛型机制的核心组成部分,它允许开发者在定义类、接口或方法时使用一个“占位符”类型,而不是具体的类型。C#中通过尖括号<T>来声明类型参数。例如:代码逻辑分析:Box<T>中的<T>表示这是一个泛型类,T是一个类型参数。方法接收一个类型为T的参数。GetItem()方法返回类型为T的值。类型参数T会在实例化时被具体类型替换,例如Box<int>等。参数说明:T是一个占位符,表示任意类型。

weixin_35391606的博客 1063

在C#中使用反射方式实现传参,参数为object,要转换参数时需要使用IEnumerable

项目场景: 我在写一个点胶机的胶线编辑器时,需要实现一个撤销重做的功能。 问题描述: ,在C#中使用反射方式实现传参,参数为object,要转换参数时需要使用IEnumerable,不然取不到想要的值。 参数委托端: //获取方法信息 执行反命令 MethodInfo methodInfo =info.Target.GetType().GetMethod(x.Value.UnName); ParameterInfo[] p = methodInfo.GetParameters(); if (p.C

尔雅慕客的博客 1705

实现自定义泛型集合与元素交换功能

创建自定义泛型集合类不仅涉及到泛型的基本概念,还关联到集合的具体实现。在本章,我们将深入了解泛型集合类的基础知识,探索如何设计满足特定需求的自定义泛型类,并学习如何利用接口来增强这些集合类的功能。泛型集合类提供了与具体类型无关的数据结构。这种集合可以存储任何类型的对象,从而增加了代码的复用性。在C#中定义一个泛型集合类非常简单。例如,创建一个简单的泛型列表:// 泛型类中的代码可以使用类型参数 T上面的代码定义了一个名为的泛型类,该类继承自.NET框架中的List<T>类。通过继承,

weixin_42611310的博客 1107

【C#】var、对应具体类型、object性能比较

【C#】var、对应具体类型、object性能比较

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 3215

本地AI代码助手:智能解析大型代码库,实现自动化重构与理解

在软件开发中,大型代码库的理解与维护是常见挑战。传统方法依赖人工阅读和有限上下文工具,效率低下。通过结合检索增强生成(RAG)和多智能体(Multi-Agent)架构,现代AI工具能够智能解析代码结构,理解模块关系,并精准定位相关代码片段。这种技术不仅能提升代码探索效率,还能自动化执行重构、文档生成等任务,在遗留系统维护、快速上手新项目等场景中发挥关键作用。本文以blackboxaicode/cli为例,展示了如何利用其代码感知和Workflow Automation能力,高效处理复杂代码库。

weixin_30240349的博客 350

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 466

为什么要用泛型而不是object

为什么要用泛型而不是object 【为什么要使用泛型】   通过泛型可以定义类型安全的数据结构(类型安全),而无须使用实际的数据类型(可扩展)。这能够显著提高性能并得到更高质量的代码(高性能),因为您可以重用数据处理算法,而无须复制类型特定的代码(可重用)。在概念上,泛型类似于 C++ 模板,但是在实现和功能方面存在明显差异。 基于 Object 的解决方案存在两个问题。 ...

好热 1414

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 441

C# 泛型 使用详解

C# 泛型 使用详解

鲤籽鲲的博客 1185

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9095

基于Landsat-8数据的山西省吕梁市地表温度反演研究过程(大气校正法)

1.数据下载:本实验采用的数据是 ①从地理空间数据云下载的来自landsat8 卫星,云量<=1%,时间为2017年5月12日的山西省吕梁市影像数据。为全面覆盖吕梁市,选用了两片影像。 ②吕梁市边界矢量图 2.数据预处理 ...

weixin_45747376的博客 6597

C#中的泛型

在 C# 中,泛型(Generics)是一种允许在定义类、接口、方法、委托等组件时使用 “类型参数(Type Parameters)” 的特性。这些类型参数类似于 “占位符”,在实际使用这些组件时才指定具体的数据类型。通过这种机制,泛型实现了“编写一次,适配多种类型”的代码复用,同时保证了编译期的类型安全,避免了传统使用object类型带来的装箱 / 拆箱开销和类型转换错误。需要注意 C# 和 Java 的不同点,比如 C# 的泛型在运行时是保留类型信息的,而 Java 有类型擦除。

2301_78015849的博客 1291

R语言绘图进阶:五大工具高效组合多图(cowplot、patchwork、layout、par、gridExtra)

本文详细介绍了R语言中五大高效组合多图的工具:cowplot、patchwork、layout、par和gridExtra。针对不同场景提供了实用指南,帮助数据分析师解决图表排版难题,提升报告专业度。特别推荐cowplot用于ggplot2图形组合,patchwork提供最简洁语法,layout则支持完全自定义布局。

weixin_42544663的博客 281

c# 基础——泛型的详细介绍

C# 泛型技术通过类型参数(如<T>)实现代码复用和类型安全,解决了传统方法中代码冗余(为每种类型重复编码)和使用object导致的类型不安全与性能损耗(装箱拆箱)问题。泛型支持类、方法、接口和委托四种形式:泛型类(如GenericStack<T>)可创建通用数据结构;泛型方法(如Swap<T>)实现类型无关的操作;泛型接口(如IComparable<T>)提供类型安全的契约;泛型委托(如Func<T>)支持多态方法调用。泛型在编译时进行类型检查,

lwpoor123的博客 1324

dji psdk开发 关于SDK认证芯片的使用

Payload SDK V3.10.0 于 2025-1-8 发布,增加了 Matrice 4T/4E 机型支持,同时也增加了 DJI SDK 认证芯片(DJI SDK CC)功能支持。关于认证芯片的介绍大疆 SDK 认证芯片(DJI SDK Certified Chip),简称 DJI SDK CC,用于认证基于 DJI Eport/Eport-Lite 接口开发的第三方负载设备,确保设备能够正常工作并与无人机可以进行有效通信,起到负载安全认证和功能授权的作用。

热爱生活,忠于自己 2134

广联达Linkworks ArchiveWebService XML实体注入漏洞复现

广联达 LinkWorks /GB/LK/Document/ArchiveService/ArchiveWebService.asmx接口处存在XML实体注入漏洞,未经身份认证的攻击者可以利用此漏洞读取系统内部敏感文件,获取敏感信息,使系统处于极不安全的状态。

0xSec 2708

# C#学习-泛型-集合-堆栈-队列-哈希-字典

C#学习第三周-泛型- 泛型 普通方法实现加法: 泛型方法实现加法: public static void Add<T>(T t1,T t2) { if(t1 is int) Console.WriteLine(int Parse(t1.tostring())+int.Parse(t2.ToString())); } if(t1 is float) { Console.WriteLine(float.Parse(t1.ToString())+float.Prase(t2.ToString()

努力前行,总会成为自己心中的那道光 1764

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# 泛型之list<T>与ArrayList<object>比较

类型List中采用泛型T的方式加入内容 而ArrayList中采用object的方式加入内容 using System; using System.Collections.Generic; using System.Collections; using System.Diagnostics; namespace ListDemo { class Program {

conquerwave的专栏 1251

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C#三十二 泛型的理解和使用

日常生活中的事物都是有类型的,比如我们说“一个女人”,那么“女”就是这个人的类型。我们可以说“女人都是水做的”,那么听者都知道这是在说“女”这种类型的人。再比如你去肉店买肉,你可以对老板说“我要十斤猪肉”,那么老板一定知道你是在要“猪”这种类型的肉。日常生活中的这些语言都是带有类型的,但是在日常生活中还有一些语言是不带类型的。比如我们经常说“人是贪婪的”,这里的人就没有类型之分,听者都知道是指所有

张晨光老师的播客 1万+

C#中的泛型和泛型集合

一、什么是泛型? 泛型是C#语言和公共语言运行库(CLR)中的一个新功能,它将类型参数的概念引入.NET Framework。类型参数使得设计某些类和方法成为可能,例如,通过使用泛型类型参数T,可以大大简化类型之间的强制转换或装箱操作的过程(下一篇将说明如何解决装箱、拆箱问题)。说白了,泛型就是通过参数化类型来实现在同一份代码上操作多种数据类型,利用“参数化类型”将类型抽象化,从而实现灵活的复用...

plovjet的专栏 517

java 泛型 比较_Java与C#泛型的对比

过往曾经有很长一段时间,直至现在,存在这样的一种观点,就是C#比Java的实现更漂亮。《Thinkin java》的作者Bruce Eckel曾经公然质疑过Java5提供的泛型。不过说实在,我一直不喜欢看BruceEckel的书,感觉上他不是一个有经验有深度的技术职员。我也很长一段实现认同这样的观点,由于人云亦云!在C#2.0支持泛型,而且在虚拟机级别支持,一开始接触时,感觉是很震撼的,感觉到泛型...

weixin_39840111的博客 620
上一篇: vs code出现preLaunchTask已终止,退出代码为1
下一篇: C#通过Aforge调用电脑摄像头(附代码)
泰勒Peano
博客等级 码龄8年 305粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值