《Effective C#》笔记(5) - 异常处理

程序总是会出错的,因为即便开发者做得再仔细,也还是会有预料不到的情况发生。令代码在发生异常时依然能够保持稳定是每一位C#程序员所应掌握的关键技能。 .NET Framework Design Guidelines建议,如果方法不能完成调用者所请求的操作,那就可以考虑抛出异常,此时必须提供各种信息,使 ...

《Effective C#》笔记(4) - Linq

优先考虑提供迭代器方法,而不要返回集合 在创建这种返回一系列对象的方法时,应该考虑将其写成迭代器方法,使得调用者能够更为灵活地处理这些对象。 迭代器方法是一种采用yield return语法来编写的方法,采用按需生成(generate-as-needed)的策略,它会等到调用方请求获取某个元素的时候 ...

C# 给Word不同页面设置不同背景

博主头像 给Word文档设置背景时,通常只能针对整篇文档设置统一的背景,如果需要对某些页面单独设置背景,则需要通过另外的方式来实现。本文通过C# 程序代码演示如何来实现。并附VB.NET代码作参考。 思路:通过在页眉中添加形状或者图片,并将形状或图片平铺(即设置形状或图片大小为页面大小)到整个页面。添加背景时 ...

巧用Dictionary实现日志数据批量插入

博主头像 背景 最近再做一个需求,就是对站点的一些事件进行埋点,说白了就是记录用户的访问行为。那么这些数据怎么保存呢,人家点一下保存一下?显然不合适,肯定是需要批量保存,提高效率。 问题窥探 首先,我想到的是Dictionary,对于C#中的Dictionary类相信大家都不陌生,这是一个Collection ...

C# 实现语音聊天

博主头像 一、语音聊天说专业点就是即时语音,是一种基于网络的快速传递语音信息的技术,普遍应用于各类社交软件中,优势主要有以下几点: (1)时效性:视频直播会因为带宽问题有时出现延迟高的问题,而语音直播相对来说会好很多,延迟低,并且能够第·一时间与听众互动,时效性强。 (2)隐私性:这一点体现在何处,如主播不想 ...

巧用lock解决缓存击穿的解决方案

博主头像 背景 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。 解决方案 1、设置热点数据永远不过期。 2、加互斥锁,互斥锁参考代码如下: 2.1、根据key生成object() pr ...

《Effective C#》笔记(3) - 泛型

只定义刚好够用的约束条件 泛型约束可以规定一个泛型类必须采用什么样的类型参数才能够正常地运作。设定约束条件的时候,太宽或太严都不合适。 如果根本就不加约束,那么程序必须在运行的时候做很多检查,并执行更多的强制类型转换操作。而且在编译器为这个泛型类型的定义生成IL码的时候,通过约束还可以为提供更多的提 ...

C# 实现一个基于值相等性比较的字典

博主头像 C# 实现一个基于值相等性比较的字典 Intro 今天在项目里遇到一个需求,大概是这样的我要比较两个 JSON 字符串是不是相等,JSON 字符串其实是一个 Dictionary<string, string> 但是顺序可能不同,和上一篇 record 使用场景 中的第一个需求类似,前面我们介绍过使 ...

C#基础篇——Hello World

博主头像 1、Hello World程序 在学习编程语言之前我要提醒大家一下 学习编程语言最忌讳的一点就是 只看不写 看的时候 大脑:嗯太简单了 我会了! 手:不 你不会 ! 等写的时候就发现 都是些什么玩意 所以我们一定要动起手来写 废话不多说 我们打开vistudio studio编译器 也可以不... ...

《Effective C#》笔记(2) - .NET的资源管理

理解并善用.NET的资源管理机制 .NET环境会提供垃圾回收器(GC)来帮助控制托管内存,这使得开发者无须担心内存泄漏等内存管理问题。尽管如此,但如果开发者能够把自己应该执行的那些清理工作做好,那么垃圾回收器会表现得更为出色。非托管的资源是需要由开发者控制的,例如数据库连接、GDI+对象、IO等;此 ...

C#语言特性及发展史

博主头像 本文按照C#语言的发展历史,介绍C#每个版本的新增特性,主要参考微软官方文档。了解这些语言特性可以帮助我们更高效的编写C#代码。 C# 1.0 与Visual Studio .NET 2002一起发布,该版本的C#非常像Java。 类 结构 接口 事件 属性 委托 运算符和表达式 语句 特性:有效地 ...

浅析 record 使用场景

博主头像 浅析 record 使用场景 Intro 之前我们有介绍过 record 基本知识,record 会实现基于值的类型比较,最近遇到的几个问题觉得用 record 来解决会非常方便,分享一下 基于值的类型比较 最近有遇到一个场景,需要比较两个 JSON 字符串是否相等,字符串比较简单,就是一个固定值的 ...

《Effective C#》笔记(1) - 编程习惯

1.优先使用隐式类型的局部变量 推荐优先使用隐式类型的局部变量,即用var来声明,因为这可以令人把注意力放在最为重要的部分,也就是变量的语义上面,而不用分心去考虑其类型. 有时隐式类型比自己指定类型表现更好 用var来声明的变量不是动态变量,隐式类型的局部变量的类型推断也不等于动态类型检查。只是编译 ...

比EntityFramework简单很多的SOD框架动态创建表的方法

博主头像 今天看到一篇博文EntityFramework Core如何映射动态模型? ,文章讲的是如何用EF动态创建表的问题,比如根据时间动态创建一个表,这种场景常出现在应用系统的日志记录功能中。原文用EF实现非常复杂,相比而言,SOD框架就要简单很多。 下面直接给出SOD框架的方案。 public clas ...

.NET 中依赖注入组件 Autofac 的性能漫聊

博主头像 Autofac 是一款超赞的 .NET IoC 容器 ,在众多性能测评中,它也是表现最优秀的一个。 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改。它的实现方式是将常规的.net类当做 组件 处理。 简单的性能测试 在 LINQPad 中,我们可以很容易的构建出一 ...

一、基于workflow-core强势开发审批流【已成功流转50W笔单据】

一、基础概念 理论支撑概念:petri网络;DNG;弹性制造系统FMS. Petri 1976年的异步系统理论。翻译过来的库所,托肯,变迁三个概念理解了就可以进入FMS系统实战理论学习。 DNG是设计流程图数据结构的理论基础。就是流程长什么样子,如何解析,如何读取,如何保存。美人鱼(mermaid) ...

windows服务+OpenSSH+SVN在Jenkins上的自动化部署进阶篇

博主头像 一、简介 关于使用Jenkins做自动化部署入门篇,我已经分别写了两篇文章,不管企业现在是在用.Net Framework还是.Net Core,不管企业是在用git还是SVN。其实这两篇文章一般足以交付开发阶段的80%业务了。不足的是这两篇文章都只是将环境 部署到了单台机器上。所以这篇文章在介绍如 ...

<1···567···36>