linq

C# .NET Socket封装

一世执手 提交于 2020-07-28 18:01:33
Socket封装, 支持多客户端 , 支持大文件传输 , 支持多线程并发 ,对较大的Socket包进行 分块传输 。 封装所要达到的效果,是可以像下面这样使用Socket和服务端通信,调用服务端的方法, 让你在使用Socket的时候,感觉不到Socket的存在,就像是调用本地方法一样,并且支持ref参数和out参数 : DemoService demoService = new DemoService(); DemoService2 demoService2 = new DemoService2(); string result = demoService.Test( " 测试DemoService " , 1 ); demoService.Test2( " 测试DemoService " , 1 ); string result2 = demoService2.RunTest( " 测试DemoService2 " , 2 ); 一、数据结构: CmdType: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataStruct { /// <summary> ///

减少if...的使用

喜夏-厌秋 提交于 2020-07-28 14:04:04
原文: 减少if...的使用 最近维护一批代码,其中包括一堆if...的使用,多的情况嵌套8、9层,痛苦不堪,所以搜寻一些可以降低if...else的方法来改善一下代码,写个简单总结。 第一种: 优化前 if (measuredValue > 8 ) return 5 * measuredValue * measuredValue - 3 ; if (measuredValue > 4 ) return 4 * measuredValue - 2 ; if (measuredValue >= 0 ) return 3 * measuredValue - 1 ; return 2 * measuredValue; 使用列表和linq优化后(摘自: https://www.linkedin.com/pulse/if-less-programming-c-jiri-pokorny ) using System; using System.Linq; namespace ConsoleApp1 { internal class Program { private static readonly MeasureTransform[] Transformations = new MeasureTransform[] { // 这个顺序决定了判断先后顺序 new MeasureTransform

【asp.net core 系列】- 11 Service层的实现样板

与世无争的帅哥 提交于 2020-07-28 12:25:29
0.前言 在《asp.net core 系列》之实战系列中,我们在之前的篇幅中对项目有了一个大概的认知,也搭建了一个基础的项目骨架。那么就让我们继续完善这个骨架,让它更加丰满。这一篇,我将带领小伙伴们一起实现用户管理功能。 1. 数据表 一般情况下,我们会把用户表和登录信息表放在两个表里。为什么会这样设计呢?出于以下几种考虑: 使功能分割,用户信息管理是用户管理,登录是登录 增加安全,降低无关信息的查询,例如访问登录接口不会连带检索用户的普通信息,当进行用户信息管理的时候,不会把登录信息也带过来 等等 废话不多说,直接上代码: namespace Data.Enums { /// <summary> /// 登录类型 /// </summary> public enum LoginType : byte { /// token登录 Token, /// 用户名密码 Password } /// <summary> /// 性别 /// </summary> public enum SexEnum { /// 男 Male, /// 女 Female, /// 隐私 None } } SysUserAuthEntity.cs using Data.Enums; using Data.Infrastructure; namespace Data.Models { public

C# 扩展TaskScheduler实现独立线程池,支持多任务批量处理,互不干扰,无缝兼容Task

隐身守侯 提交于 2020-07-28 11:37:28
为什么编写TaskSchedulerEx类? 因为.NET默认线程池只有一个线程池,如果某个批量任务一直占着大量线程,甚至耗尽默认线程池,则会严重影响应用程序域中其它任务或批量任务的性能。 特点: 1、使用独立线程池,线程池中线程分为核心线程和辅助线程,辅助线程会动态增加和释放,且总线程数不大于参数_maxThreadCount 2、无缝兼容Task,使用上和Task一样,可以用它来实现异步,参见: C# async await 异步执行方法封装 替代 BackgroundWorker 3、队列中尚未执行的任务可以取消 4、通过扩展类TaskHelper实现任务分组 5、和SmartThreadPool对比,优点是无缝兼容Task类,和Task类使用没有区别,因为它本身就是对Task、TaskScheduler的扩展,所以Task类的ContinueWith、WaitAll等方法它都支持,以及兼容async、await异步编程 6、代码量相当精简,TaskSchedulerEx类只有230多行代码 7、池中的线程数量会根据负载自动增减,支持,但没有SmartThreadPool智能,为了性能,使用了比较笨的方式实现,不知道大家有没有既智能,性能又高的方案,我有一个思路,在定时器中计算每个任务执行平均耗时,然后使用公式(线程数 = CPU核心数 * ( 本地计算时间 + 等待时间 )

ASP.NET中序列化与反序列化-以显示上一次登录的信息为例

僤鯓⒐⒋嵵緔 提交于 2020-07-28 10:51:23
场景 ASP.NET中新建Web网站并部署到IIS上(详细图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107199747 在上面博客中已经将网站部署到了IIS上。 .NET Framework 为了保证数据的安全性,并不允许所有的对象都可序列化。 要序列化某对象,需要将该对象声明为可序列化。把一个类标识为可序列化只需要在类上添加注解Serializable。 要实现序列化,需要使用System.Runtime.Serialization.Formatters.Binary下的BinaryFormatter类。 该类提供了Serialize 和Deserialize两个方法实现序列化和反序列化。 因为是要基于“流”的操作,所以需要使用System.IO下的FileStream类。 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 想要记录一下系统最后一次用户登录的信息,包括登录名、登录时间、登录IP。 纪录以后在每次打开登录页面时显示上一次登录的信息。 仅仅只有一条信息,没必要在数据库中建个表。 新建一个Web窗体页面Login.aspx,然后打开其设计视图,拖拽几个标签和输入框

《Microsoft .NET 企业级应用架构设计 (第2版)》

泄露秘密 提交于 2020-07-28 09:48:54
**《Microsoft .NET 企业级应用架构设计 (第2版)》 ========== ========== ========== [作者] (意) Dino Esposito (意) Andrea Saltarello [译者] (中) 李永伦 [出版] 人民邮电出版社 [版次] 2016年04月 第2版 [印次] 2018年05月 第5次 印刷 [定价] 69.00元 ========== ========== ========== 【第01章】 【今天的架构师和架构】 (P010) 需求经由首席架构师处理之后会交由开发团队实现。 (P011) 瀑布模型已是明日黄花,你可以将它的死亡归咎于软件开发是一种工程学。 软件开发最流行的敏捷方法学是极限编程 (XP) 。 (P012) 架构师参与开发流程的所有阶段,包括需求分析和架构设计、实现、测试、集成以及部署。 架构师的主要职责是 : 确认需求,把系统分解成更小的子系统,识别和评估技术,以及制定规范。 (P013) 架构师确认需求,尽力在设计里采用和满足它们。 (P014) 架构师需要具备的一个重要特征是语言清晰。 【第02章】 【为成功而设计】 (P020) 虽然 RAD 方案对于以数据为中心的小型简单应用程序 (如 CRUD 应用程序) 来说可能刚好合适

1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)

狂风中的少年 提交于 2020-07-28 04:16:38
1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主从库、多库的需求。( 其实不管有没有这个需求,Dapper的封装应当像NetDh框架里封装的那样使用) ; 2.涉及日志操作类的设计,需要记录用户操作日志、记录系统异常日志等; 3.涉及缓存操作类的设计,这点不用需求都应该当考虑,不管是小项目的内存缓存还是大项目中的Redis/Memcache等; 4.涉及二次开发模式简单的设计。因为多个客户需要同一个项目产品,但是客户之间对该产品的需求点又有些不一样。 本文先讲为了第1点需求而封装的数据库操作类,其它三点在接下来文章中也会介绍。 2.ORM框架Dapper介绍 Dapper是轻量级高效的框架,它高效原因是利用 Emit技术 + 各种解析缓存 + DataReader 。 Dapper可以在所有Ado.net Providers下工作,包括SQL Server, Oracle, MySQL , SQLite, PostgreSQL, sqlce, firebird 等,这些数据库操作类都有实现IDbConnection接口。你看源码会发现,Dapper提供的public方法大都是对IDbConnection的扩展。

十个便捷的单行代码编程技巧

大憨熊 提交于 2020-07-28 02:04:14
1、对列表/数组中的每个元素都乘以2 // www.1b23.com Range是半开区间 int [] ia = range ( 1 , 10 ). map (i -> i * 2 ).toArray(); List<Integer> result = range ( 1 , 10 ). map (i -> i * 2 ).boxed().collect(toList()); 2、计算集合/数组中的数字之和 range ( 1 , 1000 ) .sum (); range ( 1 , 1000 ) .reduce ( 0 , Integer ::sum); Stream .iterate ( 0 , i -> i + 1 ) .limit ( 1000 ) .reduce ( 0 , Integer ::sum); IntStream .iterate ( 0 , i -> i + 1 ) .limit ( 1000 ) .reduce ( 0 , Integer ::sum); 3、验证字符串是否包含集合中的某一字符串 final List<String> keywords = Arrays.asList( "brown" , "fox" , "dog" , "pangram" ); final String tweet = "The quick brown fox

1.NetDh框架之数据库操作层--Dapper简单封装,可支持多库实例、多种数据库类型等(附源码和示例代码)

安稳与你 提交于 2020-07-27 21:54:15
1.NetDh框架开始的需求场景 需求场景: 1.之前公司有不同.net项目组,有的项目是用SqlServer做数据库,有的项目是用Oracle,后面也有可能会用到Mysql等,而且要考虑后续扩展成主从库、多库的需求。( 其实不管有没有这个需求,Dapper的封装应当像NetDh框架里封装的那样使用) ; 2.涉及日志操作类的设计,需要记录用户操作日志、记录系统异常日志等; 3.涉及缓存操作类的设计,这点不用需求都应该当考虑,不管是小项目的内存缓存还是大项目中的Redis/Memcache等; 4.涉及二次开发模式简单的设计。因为多个客户需要同一个项目产品,但是客户之间对该产品的需求点又有些不一样。 本文先讲为了第1点需求而封装的数据库操作类,其它三点在接下来文章中也会介绍。 2.ORM框架Dapper介绍 Dapper是轻量级高效的框架,它高效原因是利用 Emit技术 + 各种解析缓存 + DataReader 。 Dapper可以在所有Ado.net Providers下工作,包括SQL Server, Oracle, MySQL , SQLite, PostgreSQL, sqlce, firebird 等,这些数据库操作类都有实现IDbConnection接口。你看源码会发现,Dapper提供的public方法大都是对IDbConnection的扩展。

一个茴字有三种写法——吐槽C#9.0的Records

北慕城南 提交于 2020-07-27 14:44:29
最近是微软开了Build 2020大会,由于疫情原因,改成了在线举行,Build大会上,C#公布9.0版本。 我个人对于C#的更新向来都是喜闻乐见,乐于接受的,对于博客园上某些人天天嘲讽C#只会增加语法糖的人,我向来对他们不屑一顾,认为他们是井底之蛙。 因此我仔细看了微软发的文章 Welcome to C# 9.0 ,准备好好观摩和学习。但当我看到Records语法时,我就隐隐感觉C#这样玩语法糖要翻车了。 后来看到知乎上的问题 如何评价即将发布的 C# 9.0? ,我稍加思索,愈发觉得Records语法完全是大型翻车现场,因此整理出来我认为的Records的翻车点(兼吐槽)。 首先看官方给出的Records样例 public data class Person { public string FirstName { get; init; } public string LastName { get; init; } } 第一个吐槽点: data class 声明有必要吗?如果要多加一个 data 关键字,直接用 record 不好吗,如果不加关键字,为什么不用 readonly class 啊。 public record Person {} public readonly class Person {} 第二个吐槽点,官方给出上面的等价定义 public data class