C#编程基础
文章平均质量分 84
skask007
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
值类型的拆箱与装箱
值类型的装箱与拆箱介绍概述在之前文章中提到了,值类型具有两种表现形式:已装箱和未装箱,这两种状态的转换过程称之为装箱和拆箱。从内存分配的角度来说,装箱就是将值类型经过处理从线程栈复制到托管堆;拆箱则是将已装箱的值类型实例从托管堆复制到线程栈。装箱与拆箱的性能损耗装箱流程:在托管堆中分配内存,内存大小 = 值类型大小 + 对象指针 + 同步块索引。逐字段将值类型复制到...原创 2018-04-14 22:02:51 · 630 阅读 · 0 评论 -
C# 堆内存 vs 栈内存 (2)
C# 堆内存与栈内存 - 参数传递第一部分了解了堆内存和栈内存的基本概念,以及值类型和引用了类型的内存分配,同时也了解了指针的基本情况。本节主要是介绍在函数调用时参数的传递情况。参数概述在第一部分了解了函数调用时内存分配的基本情况,这一部分将对做进一步详细介绍。当调用一个函数时,会发生如下操作: 1. ...翻译 2018-06-13 23:02:04 · 715 阅读 · 0 评论 -
C# 堆内存 vs 栈内存 (1)
概述在.Net当中,有Clr帮我们进行内存管理和垃圾回收,但这并不意味着我们不需要关心这些机制。为了优化程序的性能,在编写程序时,就必须要考虑内存管理和垃圾回收。同时,理解内存管理机制,能够帮我们理解各个类型变量的特性。在这篇文章中,将介绍栈内存和堆内存的基础,以及各种类型变量和他们的特性。 当程序运行时,.Net会在两个地方存储程序信息,堆内存和栈内存,它们只是对内存的逻辑分段,在程序...翻译 2018-05-06 22:50:52 · 2157 阅读 · 1 评论 -
C#与非托管DLL进行交互
C#与非托管DLL进行交互PInvoke介绍PInvoke是.Net Framework提供的一项服务,它使得托管代码与非托管之间的交互变得非常简单,一般来说,只需要声名一个方法并指定System.Runtime.InteropServicesDllImportAttribute属性,就可以调用非托管方法。先看一个最简单的例子: using System.Runtime.Intero...原创 2018-04-25 23:48:38 · 3367 阅读 · 2 评论 -
C#委托异步编程
委托异步编程原文参考:《.Net 指南》功能概述在C#中,委托有两种调用方式:Invoke同步调用;BeginInvoke异步调用。Invoke同步是在当前线程,直接调用委托方法,BeginInvoke则通过线程池中的线程实现异步调用。 常用的异步调用有四种方式: 1. 使用EndInvoke对调用线程进行阻止,直到异步方法调用完成 2. 使用IAsyncResult.Asy...原创 2018-04-19 22:29:40 · 372 阅读 · 0 评论 -
值类型与引用类型
值类型与引用类型对比概述Clr包括两种类型:值类型、引用类型 引用类型和值类型都可以通过new来实例化,引用类型在调用new时,clr在托管堆为实例分配内存,并将内存地址返回,而值类型再调用new时,clr在线程栈上为实例分配内存,并返回值本身。 下面从几个方面对值类型和引用类型进行对比。值类型与引用类型对比 值类型 引用类型 内存分配 ...原创 2018-04-13 21:49:58 · 184 阅读 · 0 评论 -
优化System.Reflection.MemberInfo存储
优化System.Reflection.MemberInfo类型的存储简述在使用反射的过程中,有可能会涉及到将反射到的MemberInfo进行保存,以便后续进行调用。在存储这些对象的过程中,可以采用绑定句柄减少内存的消耗。 Type优化Type实例的优化,通过采用RuntimeTypeHandle与Type互转实现 public void OptimizeTyp...原创 2018-04-12 18:22:10 · 578 阅读 · 0 评论 -
反射创建各种类型对象
反射构造各种类型实例一般类型对象对于一般类型,直接使用Activity.CreateInstance(Type)进行创建。public class Data{}public class Program{ static void Main() { Type type = typeof(Data); object obj = ...原创 2018-04-12 09:13:05 · 434 阅读 · 0 评论 -
C#如何重写Equals
C#如何重写Equals在自定义struct的时候,经常需要重写Equals方法,原因是一方面ValueType内部使用反射进行各字段相等判断,效率比较低;另一方面在调用基类Equals的时候,会造成值类型的装箱,(详细可以参考《值类型的拆箱与装箱》),除非能够确定类型不会进行相等性判断,否则建议进行Equals重写来提高性能。同一性与相等性同一性是指两个变量引用的是内存中的同一个...原创 2018-04-15 20:08:03 · 7425 阅读 · 0 评论 -
关于C#中List<T>类的使用建议
C#在为我们提供便捷的同时,也遮蔽了很多内部的实现,而研究这些实现能够帮助我们更好的优化程序。本篇主要简单介绍 List &amp;amp;amp;amp;lt; T &amp;amp;amp;amp;gt; 类在使用时的一些注意事项,List &amp;amp;amp;amp;lt; T &amp;amp;amp;amp;gt; 类内部是通过静态数组进行实现的,所以就有会有一下几点问题:1. 添加元素时数组容量变化每次添加(Add、I原创 2018-08-11 14:04:09 · 1032 阅读 · 0 评论
分享