摘要: Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时,发现了一处使用foreach不恰当的地方,其结果是造成了每帧近3k的GC Alloc,如此高频率的G阅读全文
posted @ 2019-03-22 15:36 Minotauros 阅读(1169) 评论(2) 编辑
摘要: 一、JIT编译器可以通过将方法内联展开(Method Inline Expansion)来提升效率,类似C++中的内联函数(Inline Function),与C++的内联函数不同的是,C#并不支持内联函数,而是由JIT编译器在运行时自动进行; 1.对于虚方法,如果JIT编译器可以确认调用该方法时变阅读全文
posted @ 2019-01-31 11:59 Minotauros 阅读(1422) 评论(0) 编辑
摘要: 本想接着上一篇详解泛型接着写一篇使用泛型时需要注意的一个性能问题,但是后来想着不如将之前的详解XX系列更正为现在的效率优化XX系列,记录在工作时遇到的一些性能优化的经验和技巧,如果有什么不足,还请大家多多指出; 在使用集合时,通常为了防止装箱操作而选择List<T>、Dictionary<TKey,阅读全文
posted @ 2018-11-30 11:24 Minotauros 阅读(1179) 评论(2) 编辑
摘要: 在优化C#代码或对比某些API的效率时,通常需要测试某个方法的运行时间,可以通过DateTime来统计指定方法的执行时间,也可以使用命名空间System.Diagnostics中封装了高精度计时器QueryPerformanceCounter方法的Stopwatch类来统计指定方法的执行时间: 1.阅读全文
posted @ 2018-11-08 20:29 Minotauros 阅读(1290) 评论(5) 编辑
摘要: 一、可空类型(Nullable Type)表示在值类型的正常取值范围内再加上一个null值,声明一个可空类型的标准语句如下: 例如,声明一个可空整数类型并赋值为null: 1.可空类型是泛型结构Nullable<T>的实例,其声明为:public struct Nullable<T> where T阅读全文
posted @ 2019-06-30 22:22 Minotauros 阅读(119) 评论(0) 编辑
摘要: 一、可以使用位于命名空间System.Threading中的Thrad类开启线程: 1.通过Thread类的静态属性CurrentThread可以获取执行当前函数所在的线程,通过实例属性ManagedThreadId可以查看当前线程的唯一标识符ID,通过实例属性Name可以获取或设置当前线程的名称;阅读全文
posted @ 2019-06-27 11:03 Minotauros 阅读(202) 评论(1) 编辑
摘要: 一、在程序运行时由CLR管理内存分配(Memory Allocation),程序启动时,操作系统会为每一个线程申请一个独立的栈内存,用于存储方法的局部变量、参数和返回值等;CLR会为进程申请一个连续的内存空间作为托管堆内存,用于存储引用类型对象和类型对象等; 1.托管堆主要包含两部分:存储引用类型对阅读全文
posted @ 2019-05-28 14:44 Minotauros 阅读(166) 评论(0) 编辑
摘要: 序列化(Serialize)是将对象转换成字节流,并将其用于存储或传输的过程,主要用途是保存对象的状态,以便在需要时重新创建该对象;反序列化(Deserialize)则是将上面的字节流转换为相应对象的过程;在.Net阵营中,Json.Net是由官方推荐的高性能开源序列化/反序列化工具,其官方网站:h阅读全文
posted @ 2019-05-24 16:19 Minotauros 阅读(584) 评论(0) 编辑
摘要: Introduction: 在项目开发中,我们都经常会用到时间戳来进行时间的存储和传递,最常用的Unix时间戳(TimeStamp)是指格林尼治时间1970年1月1日0时(北京时间1970年1月1日8时)起至现在的总秒数(10位)或总毫秒数(13位); Body: 而在C#中.Net框架没有提供现成阅读全文
posted @ 2019-04-26 12:04 Minotauros 阅读(408) 评论(1) 编辑
摘要: 原文地址:https://devblogs.microsoft.com/dotnet/announcing-the-net-framework-4-8/ 我们很高兴地宣布今天发布.NET Framework 4.8。它包含在Windows 10 2019 May更新中。.NET Framework 阅读全文
posted @ 2019-04-19 16:20 Minotauros 阅读(4281) 评论(7) 编辑
摘要: 1.匿名方法和Lambda表达式中可以访问到声明该匿名方法或Lambda表达式所在方法中的参数或局部变量,这些变量称为外部变量(Outer Variable),外部变量的生命周期会持续到引用匿名方法或Lambda表达式的委托实例被垃圾回收器回收为止: 2.调用匿名方法或Lambda表达式时,访问到的阅读全文
posted @ 2019-03-29 02:08 Minotauros 阅读(534) 评论(1) 编辑
摘要: Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时,发现了一处使用foreach不恰当的地方,其结果是造成了每帧近3k的GC Alloc,如此高频率的G阅读全文
posted @ 2019-03-22 15:36 Minotauros 阅读(1169) 评论(2) 编辑
摘要: 一、程序运行时产生的错误通过使用一种称为异常(Exception)的机制在程序中传递,通过异常处理(Exception Handling)有助于处理程序运行过程中发生的意外或异常情况;异常可由CLR和客户端代码抛出(Throw),抛出的异常会在调用堆栈中传递,直到遇到可以捕获该异常的语句进行处理并中阅读全文
posted @ 2019-02-28 20:12 Minotauros 阅读(646) 评论(0) 编辑
摘要: 一、迭代器(Iterator)通过持有迭代状态可以获取当前迭代元素并且识别下一个需要迭代的元素,从而可以遍历集合中每一个元素而不用了解集合的具体实现方式; 实现迭代器功能的方法被称为迭代器方法,迭代器方法的返回值类型可以是以下4种接口类型中任意一种:位于命名空间System.Collections中阅读全文
posted @ 2019-02-26 18:05 Minotauros 阅读(569) 评论(0) 编辑