随笔分类 - C#
摘要:简介 在上一篇.NET性能优化-推荐使用Collections.Pooled一文中,提到了使用Pooled类型的各种好处,但是在群里也有小伙伴讨论了很多,提出了很多使用上的疑问。 所以特此写了这篇文章,补充回答小伙伴们问到的一些问题,和遇到某些场景如何处理。 问题分析 以下就是这两天收集到比较常见的
阅读全文
摘要:## 前言 这一次要和大家分享的一个Tips是在字符串拼接场景使用的,我们经常会遇到有很多短小的字符串需要拼接的场景,在这种场景下及其的不推荐使用`String.Concat`也就是使用`+=`运算符。 目前来说官方最推荐的方案就是使用`StringBuilder`来构建这些字符串,那么有什么更快内
阅读全文
摘要:前言 本系列的主要目的是告诉大家在遇到性能问题时,有哪些方案可以去优化;并不是要求大家一开始就使用这些方案来提升性能。 在之前几篇文章中,有很多网友就有一些非此即彼的观念,在实际中,处处都是开发效率和性能之间取舍的艺术。《计算机编程艺术》一书中提到过早优化是万恶之源,在进行性能优化时,你必须要问自己
阅读全文
摘要:前言 我们知道在C#和Java明显的一个区别就是C#可以自定义值类型,也就是今天的主角struct,我们有了更加方便的class为什么微软还加入了struct呢?这其实就是今天要谈到的一个优化性能的Tips使用结构体替代类。 那么使用结构体替代类有什么好处呢?在什么样的场景需要使用结构体来替代类呢?
阅读全文
摘要:前言 计划开一个新的系列,来讲一讲在工作中经常用到的性能优化手段、思路和如何发现性能瓶颈,后续有时间的话应该会整理一系列的博文出来。 今天要谈的一个性能优化的Tips是一个老生常谈的点,但是也是很多人没有注意的一个点。在使用集合类型是,你应该设置一个预估的初始大小,那么为什么需要这样做?我们一起来从
阅读全文
摘要:前言 周五在群里面有小伙伴问,ASP.NET Core这个HttpContextAccessor为什么改成了这个样子? 在印象中,这已经是第三次遇到有小伙伴问这个问题了,特意来写一篇记录,来回答一下这个问题。 聊一聊历史 关于HttpContext其实我们大家都不陌生,它封装了HttpRequest
阅读全文
摘要:## 前言 这里先和大家介绍一下.NET一些发布的历史,以前的.NET框架原生并不支持最终编译结果的单文件发布(需要依赖第三方工具),我这里新建了一个简单的ASP.NET Core项目,发布以后的目录就会像下图这样,里面包含很多`*.dll`文件和其它各类的文件。 ![](https://img20
阅读全文
摘要:前言 之前在群里面有群友问过一个这样的问题,在**.NET中如何快速的比较两个byte数组是否完全相等**,听起来是一个比较两个byte数组是完全相等是一个简单的问题,但是深入研究以后,觉得还是有很多方案的,这里和大家一起分享下。 评测方案 这里为了评测不同方案的性能,我们用到了BenchmarkD
阅读全文
摘要:本文旨在帮助.NET开发者,如何思考内存性能分析,并在需要时找到正确的方法来进行这种分析。在本文档中.NET的包括.NET Framework和.NET Core。为了在垃圾收集器和框架的其他部分获得最新的内存改进,我强烈建议你使用.NET Core,如果你还没有的话,因为那是应该尽快去升级的地方。
阅读全文
摘要:[TOC] 一、前言 本篇文章配图以及文字其实整理出来很久了,但是由于各种各样的原因推迟到现在才发出来,还有之前立Flag的《多线程编程》的笔记也都已经写好了,只是说还比较糙,需要找个时间整理一下才能和大家见面。 对于C 中的 类相信大家都不陌生,这是一个 类型,可以通过 Key/Value(键值对
阅读全文
摘要:[TOC] 一、前言 笔者最近在做一个项目,项目中为了提升吞吐量,使用了消息队列,中间实现了 生产消费模式 ,在生产消费者模式中需要有一个集合,来存储生产者所生产的物品,笔者使用了最常见的 集合类型。 由于生产者线程有很多个,消费者线程也有很多个,所以不可避免的就产生了线程同步的问题。开始笔者是使用
阅读全文
摘要:[TOC] 本系列首页链接: "[C 多线程编程系列(一) 简介" ] 1.1 简介 在之前的几个章节中,就线程的使用和多线程相关的内容进行了介绍。因为线程涉及到异步、同步、异常传递等问题,所以在项目中使用多线程的代价是比较高昂的,需要编写大量的代码来达到正确性和健壮性。 为了解决这样一些的问题,在
阅读全文
摘要:[TOC] 1.1 简介 在本章中,主要介绍 线程池(ThreadPool) 的使用;在C 中它叫 ,在使用线程池之前首先我们得明白一个问题,那就是为什么要使用线程池。其主要原因是 创建一个线程的代价是昂贵的 ,创建一个线程会消耗很多的系统资源。 那么线程池是如何解决这个问题的呢?线程池在初始时会自
阅读全文
摘要:[TOC] 1.1 简介 本章介绍在C 中实现线程同步的几种方法。因为多个线程同时访问共享数据时,可能会造成共享数据的损坏,从而导致与预期的结果不相符。为了解决这个问题,所以需要用到线程同步,也被俗称为“加锁”。但是 加锁绝对不对提高性能,最多也就是不增不减 ,要实现性能不增不减还得靠高质量的 同步
阅读全文
摘要:C 多线程编程系列(二) 线程基础 [TOC] 1.1 简介 线程基础主要包括线程创建、挂起、等待和终止线程。关于更多的线程的底层实现,CPU时间片轮转等等的知识,可以参考 一书中关于进程和线程的章节,本文不过多赘述。 1.2 创建线程 在C 语言中,创建线程是一件非常简单的事情;它只需要用到 命名
阅读全文
摘要:[TOC] 系列大纲 目前只整理到第二章,线程同步,笔者后面会慢慢更新,争取能把这本书中精华的知识都分享出来。 "C 多线程编程系列(一) 简介" "C 多线程编程系列(二) 线程基础" "C 多线程编程系列(三) 线程同步" "C 多线程编程系列(四) 使用线程池" "C 多线程编程系列(五) 使
阅读全文
摘要:[TOC] 一、前言 本教程是入门基础教程,主要是笔者在项目中使用MongoDB .Net官方驱动对MongoDB内嵌文档的操作时遇到了很多不方便的情况,踩了很多的坑,所以单独整理出来一篇文章,来讲一讲笔者踩坑的过程。 笔者水平有限,如有错误还请批评指正! 1. 运行环境 .net版本 .Net F
阅读全文
摘要:[TOC] 因项目需要,对于部分控制器需要实现伪静态方便搜索引擎优化(SEO),过程比较曲折,简单的记录一下。 1.什么是伪静态?为什么要实现伪静态? 伪静态:动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。 例如:我们当访问地址http://w
阅读全文