最新版本号[免费下载]
  • async/await 的基本实现和 .NET Core 2.1 中相关性能提升
    async/await 的基本实现和 .NET Core 2.1 中相关性能提升

    前言这篇文章的开头,笔者想多说两句,不过也是为了以后再也不多嘴这样的话。在日常工作中,笔者接触得最多的开发工作仍然是在 .NET Core 平台上,当然因为团队领导的开放性和团队风格的多样性(这和 CTO 以及主管的个人能力也是分不开的),业界前沿的技术概念也都能在上手的项目中出现。所以虽然现在团队仍然处于疾速的发展中,也存在一些奇奇怪怪的事情,工作内容也算有紧有松,但是总体来说也算有苦有乐,不是十分排斥。其实这样的环境有些类似于笔者心中的“圣地” Thoughtworks 的 雏形(TW的HR快来找我啊),笔者和女朋友谈到自己最想做的工作也是技术咨询。此类技术咨询公司的开发理念基本可以用一句概括:遵循可扩展开发,可快速迭代,可持续部署,可的架构设计,追求目标应用场景下最优于团队的技术选型决策。所以语言之争也好,平台之争也好,落到每一个对编程和解决问题感兴趣的开发者身上,便成了最微不足道的问题。能够感受不同技术间的碰撞,领略到不同架构思想中的精妙,就已经是一件满足的事情了,等到团队需要你快速应用其他技术选型时,之前的努力也是助力。当然面向工资编程也是一种取舍,笔者思考的时候也会陷入这个怪圈,所以希望在不断的学习和实践中,能够让自己更满意吧。著名的 DRY 原则告诉我们 —— Don't repeat yourself,而笔者想更进一步的是,Deep Dive And Wide Mind,深入更多和尝试更多。奇怪的前言就此结束。作为最新的正式版本,虽然版本号只是小小的提升,但是 .NET Core 2.1 相比 .NET Core 2.0 在性能上又有了大大的提升。无论是项目构建速度,还是字符串操作,网络传输和 JIT 内联方法性能,可以这么说的是,如今的 .NET Core 已经主动为开发者带来抠到字节上的节省体验。具体的介绍还请参看 Performance Improvements in .NET Core 2.1 。而在这篇文章里,笔者要聊聊的只是关于 async/await 的一些底层原理和 .NET Core 2.1 在异步操作对象分配上的优化操作。async/await 实现简介熟悉异步操作的开发者都知道,async/await 的实现基本上来说是一个骨架代码(Template method)和状态机。从反编译器中我们可以窥见骨架方法的全貌。假设有这样一个示例程序internal class Program{    private static void Main()    {        var result = AsyncMethods.CallMethodAsync("async/await").GetAwaiter().GetResult();         Console.WriteLine(result);     } }internal static class AsyncMethods{    internal static async Task<int> CallMethodAsync(string arg)    {        var result = await MethodAsync(arg);        await Task.Delay(result);        return result;     }    private static async Task<int> MethodAsync(string arg)    {        var total = arg.First() + arg.Last();        await Task.Delay(total);        return total;     } }为了能更好地显示编译代码,特地将异步操作分成两个方法来实现,即组成了一条异步操作链。这种“侵入性”传递对于开发其实是更友好的,当代码中的一部分采用了异步代码,整个传递链条上便不得不采用异步这样一种正确的方式。接下来让我们看看编译器针对上述异步方法生成的骨架方法和状态机(也已经经过美化产生可读的C#代码)。[DebuggerStepThrough] [AsyncStateMachine((typeof(CallMethodAsyncStateMachine)] private static Task<int> CallMethodAsync(string arg) {     CallMethodAsyncStateMachine stateMachine = new CallMethodAsyncStateMachine {         arg = arg

    相关性,实现,提升,基本,中能
    2018-09-30

    105

  • .NET Core全面扫盲贴 (上)
    .NET Core全面扫盲贴 (上)

    1. 前言2. .NET Core 简介2.1 .NET Core是什么2.2 .NET Core的组成2.3 .NET Core的特性2.4 开发语言3. Get Started3.2.1 安装和运行3.2.2 Self-contained applications 发布(1) 修改project.json文件 (2) 执行restore和publish操作 (3) 在Linux平台上运行 3.1.1 安装.NET Core SDK和.NET Core Runtime3.1.2 简单的运行结果3.1 Win 103.2 CentOS 7.2(本地Hyper-V)4. 总结4.1 尾声4.2 相关学习资料5. 参考资料1. 前言.NET发行至今已经过了十四个年头。随着版本的不断迭代更新,.NET在Windows平台上的表现也是越来越好,可以说Windows平台上所有的应用类型.NET几乎都能完成。只是成也Windows,败也Windows,这十四年来,除了部分“民间”版本,.NET一直没能在官方支持下摆脱Windows平台的局限,“开源”和“跨平台”这两个词语也是所有.NET开发者心中的痛楚。最终,.NET Core出现了,它让开发者们在官方和社区的支持走出了Windows,可以在macOS,Linux主流distributions上编写调试并部署.NET程序。2. .NET Core 简介2.1 .NET Core是什么.NET Core是一个开源通用的开发框架,支持跨平台,即支持在Window,macOS,Linux等系统上的开发和部署,并且可以在硬件设备,云服务,和嵌入式/物联网方案中进行使用。.NET Core的源码放在GitHub上,由微软官方和社区共同支持。它和传统的.NET Framework,属于“子集—超集”的关系,或者你也可以简单地认为它就是.NET Framework的跨平台版本(基于BCL的层面上看)。这是因为在当前版本中(1.0),.NET Core中的大部分核心代码都是从.NET Framework中继承重写的,包括Runtime和Libraries(如GC

    全面,
    2018-09-30

    131

  • .NET Core全面扫盲贴(下)
    .NET Core全面扫盲贴(下)

    3. Get Started以下内容演示在Windows10和CentOS 7.2下的命令行生成和发布demo3.1 Win 103.1.1 安装.NET Core SDK和.NET Core Runtime.NET Core SDK = 使用.NET Core开发应用.NET Core Runtime 和 SDK+CLI 工具3.1.2 简单的运行结果打开cmd,依次输入mkdir .project(创建目录),cd .\.project(进入目录),dotnet new(新建初始项目),dotnet restore(还原依赖),dotnet run(运行)即可运行第一个Hello World程序3.2 CentOS 7.2(本地Hyper-V)3.2.1 安装和运行详情请见:.NET Core in CentOS,大致命令如下sudo yum install libunwind libicu   #安装libunwind,libicu包 curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131 #下载dotnet-dev-centos-x64.1.0.0-preview2-003121.tar文件,有时会因为网络问题下载较慢,耐心等待即可,当然也可以手动下载后放到目录下。 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet #创建目录并解压已下载文件 sudo ln -s /opt/dotnet/dotnet /usr/local/bin #将目录链接到$PATH下,否则dotnet命令无法识别 mkdir hwapp cd hwappdotnet new #创建默认.NET Core应用dotnet restore #还原依赖包dotnet run #运行,结果将显示Hello World!第六行命令后可使用dotnet --info查看是否链接成功,显示如下.NET Command Line Tools (1.0.0-preview2-003121)Product Information: Version:            1.0.0-preview2-003121  Commit SHA-1 hash:  1e9d529bc5Runtime Environment:  OS Name:     centos  OS Version:  7  OS Platform: Linux RID:         centos.7-x64以上步骤在.NET Core官方网站都可以找到,可以看到应用在经过简单的dotnet new

    全面,
    2018-09-30

    109