摘要:在平时开发过程中,数组是我们使用频率最高的类型之一,在使用定长列表时,数组可以说是最佳方案,这也是我们最熟悉的数据结构之一。 在C#中使用数组,可以获取在内存上连续的相同类型的一组变量,在连续访问时可以满足CPU访问寄存器的时间局部性和空间局部性,大大提高了对大量数据的访问效率,但是在使用它时我们依 阅读全文
posted @ 2019-12-31 19:32 Minotauros 阅读(284) 评论(0) 推荐(0) 编辑
摘要:Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时,发现了一处使用foreach不恰当的地方,其结果是造成了每帧近3k的GC Alloc,如此高频率的G 阅读全文
posted @ 2019-03-22 15:36 Minotauros 阅读(1732) 评论(2) 推荐(7) 编辑
摘要:一、JIT编译器可以通过将方法内联展开(Method Inline Expansion)来提升效率,类似C++中的内联函数(Inline Function),与C++的内联函数不同的是,C#并不支持内联函数,而是由JIT编译器在运行时自动进行; 1.对于虚方法,如果JIT编译器可以确认调用该方法时变 阅读全文
posted @ 2019-01-31 11:59 Minotauros 阅读(2181) 评论(0) 推荐(2) 编辑
摘要:本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家多多指出; 在使用集合时,通常为了防止装箱操作而选择List<T>、Dictionary<TKey, 阅读全文
posted @ 2018-11-30 11:24 Minotauros 阅读(1665) 评论(2) 推荐(6) 编辑
摘要:在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器QueryPerformanceCounter方法的Stopwatch类来统计指定方法的执行时间: 1. 阅读全文
posted @ 2018-11-08 20:29 Minotauros 阅读(1522) 评论(6) 推荐(12) 编辑
摘要:一、索引器(Indexer)允许类和结构的实例像数组一样通过索引取值,可以看做是对[]运算符的重载,索引器实际上就是有参数的属性,也被称为有参属性或索引化属性,其声明形式与属性相似,不同之处在于索引器的访问器需要传入参数; 1.声明索引器: class MyClass { string[] myAr 阅读全文
posted @ 2020-03-31 22:53 Minotauros 阅读(111) 评论(0) 推荐(0) 编辑
摘要:一、属性(Property)作为类和结构的成员,是对字段的一种封装方式,实际上是一种特殊的方法,被称为访问器(Accessor),从而隐藏实现和验证代码,有助于提高字段读取和赋值的安全性和灵活性; 1.属性访问器包含两种类型:用于读取并返回值的get访问器,用于赋值新值的set属性访问器;通常将字段 阅读全文
posted @ 2020-02-29 22:31 Minotauros 阅读(149) 评论(0) 推荐(0) 编辑
摘要:Introduction: 在C#6及以上版本中,加入了一项特别好用的运算符:Null条件运算符?.和?[]可以用来方便的执行判空操作,当运算符左侧操作数不为null时才会进行访问操作,否则直接返回null。这极大的简化的判空代码的书写,但在使用过程中仍然需要注意一些问题,以免其带来我们意想不到的后 阅读全文
posted @ 2020-02-29 19:17 Minotauros 阅读(183) 评论(0) 推荐(0) 编辑
摘要:一、结构(Struct)是CTS中五种基本类型之一,是一种值类型,同样封装了同属一个逻辑单元的数据和行为,这些数据和行为通过结构中的成员表示;结构与类共享大多数相同的语法,但结构比类受到的限制更多,结构适用于表示轻量级类型;使用struct关键字定义结构: //定义一个公共结构MyStruct pu 阅读全文
posted @ 2020-01-27 23:09 Minotauros 阅读(125) 评论(0) 推荐(0) 编辑
摘要:一、类(Class)是CTS中五种基本类型之一,是一种引用类型,封装了同属一个逻辑单元的数据(Data)和行为(Behavior),这些数据和行为通过类中的成员表示;使用class关键字定义类: //定义一个公共类MyClass public class MyClass { public int M 阅读全文
posted @ 2020-01-27 14:13 Minotauros 阅读(113) 评论(0) 推荐(1) 编辑
摘要:开个新坑。 阅读全文
posted @ 2019-12-31 22:46 Minotauros 阅读(143) 评论(0) 推荐(0) 编辑
摘要:在平时开发过程中,数组是我们使用频率最高的类型之一,在使用定长列表时,数组可以说是最佳方案,这也是我们最熟悉的数据结构之一。 在C#中使用数组,可以获取在内存上连续的相同类型的一组变量,在连续访问时可以满足CPU访问寄存器的时间局部性和空间局部性,大大提高了对大量数据的访问效率,但是在使用它时我们依 阅读全文
posted @ 2019-12-31 19:32 Minotauros 阅读(284) 评论(0) 推荐(0) 编辑
摘要:一、在C#中,使用命名空间(Namespace)可以帮助控制自定义类型的作用范围,同时对大量的类型进行组织;使用namespace关键字声明命名空间,命名空间可以嵌套使用: namespace MyNameSpace { namespace MyNestedNameSpace { class MyC 阅读全文
posted @ 2019-11-30 16:37 Minotauros 阅读(334) 评论(0) 推荐(0) 编辑
摘要:一、对于继承自同一基类的多个不同派生类的实例,在运行时可以将它们赋值给基类类型的变量,访问该变量的同一个成员会根据该变量运行时类型的不同而产生不同的行为,这个特性即被称为多态(Polymorphism);多态允许以同一种方式访问同一个变量的成员而产生不同的行为; 1.在C#中,每个类型都是多态的,因 阅读全文
posted @ 2019-10-31 21:13 Minotauros 阅读(76) 评论(0) 推荐(0) 编辑
摘要:一、通过继承(Inheritance)可以在创建新类时复用、扩展和重写已在其它类中声明的可访问的实例成员(除构造函数和析构函数外),类完全支持继承,可以继承自类也可以实现接口,结构不支持继承,只可以实现接口;继承是通过派生(Derivation)实现的,被继承的类称为基类(Base Class),继 阅读全文
posted @ 2019-10-31 21:13 Minotauros 阅读(75) 评论(0) 推荐(0) 编辑