- 博客(283)
- 资源 (4)
- 收藏
- 关注
原创 十大.NET Core性能优化技巧
通过这些工具,可以定位到代码中的热点和性能问题,从而进行有针对性的优化。在.NET Core中,可以通过使用ORM框架(如Entity Framework Core)来简化数据库操作,并通过合理的索引、查询优化等手段提高数据库访问性能。在.NET Core中,可以使用内存缓存(MemoryCache)或分布式缓存(如Redis)来存储频繁访问的数据,减少不必要的数据库或网络请求。在性能优化时,应遵循“先让它工作,再让它快”的原则,先确保代码的正确性和功能性,再进行性能调优。性能优化是一个持续不断的过程。
2024-02-14 23:28:35
493
原创 在.NET中,string类型可以作为lock的锁对象吗?
在.NET中,所有的对象都继承自System.Object,而System.Object类有一个名为Monitor的静态类,该类提供了Enter, Exit, 和 TryEnter等方法,这些方法用于实现lock语句的底层机制。相反,你应该使用专门的、私有的对象实例来作为锁对象,以确保并发控制的安全性和可维护性。通过这种方式,你可以确保锁的使用是明确的,并且只在需要时发生。潜在的冲突:如果你的应用程序中的不同部分都使用相同的string常量作为锁对象,那么这些部分可能会意外地彼此阻塞,导致死锁或性能问题。
2024-02-14 23:26:34
291
原创 超越Swagger和Postman:使用Visual Studio的.http文件轻松调试Web API
与传统的Swagger和Postman等工具相比,.http文件具有更高的集成度、更简便的操作和更强的直观性。此外,对于更复杂的API测试场景,可以考虑结合使用其他测试框架和工具,如xUnit、NUnit等,以实现更全面的测试覆盖。创建.http文件:在Visual Studio中,选择“文件”>“新建”>“文件”,然后选择“HTTP Request”来创建一个新的.http文件。编写HTTP请求:在.http文件中,使用简单的语法编写HTTP请求,包括请求方法、URL、请求头、请求体等。
2024-02-14 23:25:18
574
原创 最全面透彻的RabbitMQ指南
概念RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。AMQPA
2022-05-19 22:47:26
355
原创 说说最近linux运维那些事
背景作为一名开发,平时工作中也会涉及到后端服务部署等一些linux运维任务,在此想总结一下我最近一次遇到的运维问题,事情起因是这样的,在一个天气晴朗的早上,本来在愉快的摸着鱼,开着总结会,突然接到电话,客户线上的项目全部不能用了,白屏;尼玛,当听到这个东西,我心里是想骂人的,因为这个是祖传的东西,大家懂的,本来不关我的事情,但是谁让我们领着工资,还是的解决。据客户介绍是服务器重启了;第一反应是服务没启动。== ,服务不都是开机启动的吗?带着疑问,在现场运维小哥的帮助下,一个个问题排查,最后终于恢复了服务
2022-05-15 11:25:21
641
转载 编写equals方法
我们知道List是一种有序链表:List内部按照放入元素的先后顺序存放,并且每个元素都可以通过索引确定自己的位置。List还提供了boolean contains(Object o)方法来判断List是否包含某个指定元素。此外,int indexOf(Object o)方法可以返回某个元素的索引,如果元素不存在,就返回-1。我们来看一个例子:import java.util.List;Run这里我们注意一个问题,我们往List中添加的"C"和调用contains("C")传入的"C.
2022-04-10 23:22:22
366
原创 Java 注解
注解基础知识点定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。作用分类:①编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】② 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】③编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】中文名Java 注
2022-04-10 23:19:03
340
原创 .Net Core中利用反射实现批量依赖注入
在.net core中使用依赖注入是很常见的,最常见的我们会使用以下三种services.AddScoped<TestIBLL, TestBLL>();services.AddSingleton<TestIBLL, TestBLL>();services.AddTransient<TestIBLL, TestBLL>();当我们的业务层内容不多的时候这样写没有什么问题,但是加入有100个BLL呢,那样一个一个加会很麻烦,每加一个就要
2022-02-27 11:14:21
1536
1
原创 ASP.NET Core 配置跨域(CORS)
在 Startup类,ConfigureServices方法里,添加如下代码: services.AddCors(options => options.AddPolicy("cors", p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod())); services.Configure<ApiBehaviorOptions>(options =>
2022-02-27 11:12:24
926
原创 一篇文章了解Liquid模版引擎
背景平常比如开发个代码生成器一般是定一个模板,然后里面很多变量,根据数据生成文件。这时候模版引擎就派上了用场。下面我们来介绍下Liquid。什么是Liquid 呢,就像java、c#等编程语言一样,Liquid也是一种独立的语言,没什么大差别,基本功能都有。动态生成文件,可以输出变量,操作数组等,这些都能达到。官方的介绍Liquid 是一门开源的模板语言,由 Shopify 创造并用 Ruby 实现。它是 Shopify 主题的骨骼,并且被用于加载店铺系统的动态内容。...
2022-02-13 10:57:45
1063
原创 .Net Core 读取文件时中文乱码问题的解决方法
背景今天在使用core web api上传txt文档的时候本来很顺利的,但是一测试发现读取的中文内容是乱码的,很是纳闷。出于经验,立马把代码的Encoding.Default改成 Encoding.uft8, 发现还是不行。后面索性把上传的文件另存为下,特地选择带有bom的utf8选项。但是发现还是乱码。郁闷。问题于是在本能的百度下,发现方法一大堆,但是没有一个可以解决问题的。无意中,发现了链接,找到了官网 如下https://do...
2022-02-12 12:01:13
1625
原创 redis缓存设计要点随谈
在高并发系统中,缓存是必不可少的一部分。没有缓存对系统的加速和阻挡大量的请求直接落到系统的数据库,系统是很难撑住高并发的冲击。所以缓存设计是系统很关键的一环。1、缓存更新缓存的数据一般都是有有效期的,过了一段时间之后就会失效,再次访问时需要重新加载。缓存的失效是为了保证与数据源真实的数据保证一致性和缓存空间的有效利用性。缓存更新一般分为3种1、空间有限,当达到最大值时 根据系统的设置规则直接过期的,比如最少使用、随机等一些过期策略。2、缓存...
2022-02-05 11:37:46
616
原创 聊聊mysql执行过程
在项目开发当中 ,很多时候,我们的数据库应用优化都是从表层到里层的一个过程。比如一个查询写下来,我们的优化方向大多时候都是先看方法执行的时间长短,然后再决定是否去优化它,下意识的第一步操作都是看是否命中索引,接下去再看数据量、设计是否合理。。。等等。那么其实在我们一开始的时候,如果我们事先知道数据库的一个执行流程,我们就可以按照他的规则去写sql,进而提高性能和开发效率。这点有点像前些年 我们国家做出口的时候开始的时候没有吃透人家的一些法律规则 导致出现违规不...
2022-02-04 17:25:53
635
原创 Task+ConcurrentQueue多线程编程
队列(Queue)代表了一个先进先出的对象集合。当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。 ConcurrentQueue<T>队列是一个高效的线程安全的队列,是.Net Framework 4.0,System.Collections.Concurrent命名空间下的一个数据结构。Task是在ThreadPool的基础上推出的,我们知道了ThreadPool的弊端:我们不能控制线程池中线程...
2022-02-03 11:23:58
726
原创 2021年,我输出了哪些内容 - 努力的人,运气总不会太差
Redis系列Redis常用概念简介如何使用redis生成唯一编号Redis持久化RDB和AOF区别Redis数据类型之哈希Hashredis查询key总数的解决办法c# Redis list 当作队列使用基于Redis的分布式锁和Redlock算法使用Redis set 解决数据的唯一性问题redis 列表-常用命令面试官:Redis 内存数据满了,会宕机吗?Redis快速入门及应用...
2022-02-02 17:11:09
3030
原创 .NET网站国际化策略
我所在的公司是做SAAS软件,用户群体是面向全球的,因此对应业务系统国际化就是顺理成章的事情。其实国际化重点在于多语言支持,本文就从这方面入手。多语言如上解决方案截图,BQoolCommon.Resource是多语言资源工程,下面来看看具体怎么实现:2.1、定义多语言资源文件以支持中(繁体、简体)英文为例,定义如下图资源文件资源文件中定义的资源配置项如下:生成对应的键值对属性 /// <summary> //...
2022-02-02 16:56:28
383
原创 Filter+Redis解决项目之间调用的幂等性
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同在项目远程调用中,如果接口调用失败或者是超时,客户端都会采用重试请求,但是在客户端重试的过程中都会导致服务器服务处理出现【重复消费】;一般情况下,接口产生重复消费的原因有以下2种:1、表单重复提交;2、调用接口过程中失败产生重试;这时候接口调用就会产生了一个叫做幂等性的问题对于查询和删除数据的场景都有天然的...
2022-02-01 00:36:23
638
原创 Jenkins持续集成系列
1、自动化部署:在Windows平台安装Jenkins2、.net framework+git在Jenkins上的自动化部署入门3、Jenkins发布.Net项目到IIS4、jenkins构建触发器定时任务
2022-01-29 11:29:57
944
原创 .net framework+git在Jenkins上的自动化部署入门
接上篇自动化部署:在Windows平台安装Jenkins下面我们来分享下.net framework+git在jenkins上的自动化部署。流程大概是通过git拉取最新代码通过vs编译代码发布代码到指定路径环境操作系统为windows10代码管理使用gitvisual studio 20191、下载安装Git既然代码托管在git,所以需要通过git客户端拉取代码。git客户端下载地址 https://git-scm.com/download/win...
2022-01-26 01:15:02
805
原创 自动化部署:在Windows平台安装Jenkins
在软件开发中经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)。其中Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。是CICD的一大利器。Jenkins可以做什么它的流水线操作正如其名,将机械的工作流程提炼出来,重复执行,可以定义成定时操作,可以定义触发条件,可以填写参数,可以写入控制语句。代替我们完成:1、拉
2022-01-23 23:14:48
1995
2
原创 解决new Thread().Start导致高并发CPU 100%的问题
以下文章来源于UP技术控,作者conanUP技术控.江东子弟多才俊,卷土重来未可知。——唐·杜牧背景之前接手一个项目的时候,发现到处是newThread(()=>{//dosomething}).Start();这么做的目的,无非是为了减少页面等待时间提高用户体验,把一些浪费时间的操作放到新线程中在后台运行。问题但是这样带来的问题是大量的创建线程,非常影响项目的性能,尤其是在一些大并发量访问的时候,经常导致后果是cpu 100%。当然,如果你的项...
2022-01-20 19:35:28
1285
原创 到底该不该使用存储过程
百度百科对存储过程的定义存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升;那么关于开发当中是否使用存储过程,一直以来都有很多争论;在《阿里巴巴java编码规范》有这样一条关于这个,我个人在互联网行业是赞同的;首先,确
2022-01-03 20:42:42
396
原创 使用工作单元UnitOfWork实现事务
概述工作单元模式有如下几个特性:1、使用同一上下文2、跟踪实体的状态3、保障事务一致性。工作单元用来维护一个由已经被业务事物修改的业务对象组成的列表。Unit Of Work模式负责协调这些修改的持久化工作以及所有标记的并发问题。在数据访问层中采用Unit Of Work模式带来的好处是能够确保数据完整性。如果在持久化一系列业务对象(他们属于同一个事物)的过程中出现问题,那么应该将所有的修改回滚,以确保数据始终处于有效状态。主要代码实现1、定义接口,实现构造函数publicUnit...
2022-01-03 20:41:21
702
原创 NLog-ASP.NET Core 5入门
1、创建一个新的ASP.NET Core项目在Visual Studio 2019中。需要版本16.8+2、手动或使用NuGet在csproj中添加依赖项安装最新版本: NLog.Web.AspNetCore4.9+ 如有可能,更新NLog软件包 在csproj中: <ItemGroup> <PackageReference Include="NLog.Web.AspNetCore" Version="4.9.3" /> <.
2021-12-31 00:51:07
235
原创 巧用ActionFilter的AOP特性,为返回的数据增加返回码和消息
背景对于处理接口返回值统一加密,过滤,特定值统一处理,统一返回等多种需求,net的拦截器前置拦截比较常用,例如:登录校验,参数格式校验等等。接下来介绍filter。filter过滤器实现filter的ActionFilterAttribute可以做一定的处理,通过对OnActionExecuted的执行控制,来实现很多场景。ActionFilterAttribute类是C# ASP.net MVC中的过滤类,跟JAVA的Filter效果类似,但是Filter是接口。ActionFilterAtt
2021-12-26 10:22:17
673
原创 如何在C#中捕获内存不足异常?
当CLR未能分配所需的足够内存时,将发生System.OutOfMemoryException。System.OutOfMemoryException继承自System.SystemException类。OutOfMemoryException使用COR_E_OUTOFMEMORY值为 0x8007000E的 HRESULT 。有关OutOfMemoryException实例的初始属性值列表,请参阅OutOfMemoryException构造函数。一个OutOfMemoryException异常异常主要
2021-12-26 10:20:13
2100
原创 C# Jpush 极光推送消息推送
简介消息推送(Push)指运营人员通过自己的产品或第三方工具对用户移动设备进行的主动消息推送。用户可以在移动设备锁定屏幕和通知栏看到push消息通知,通知栏点击可唤起APP并去往相应页面。我们平时在锁屏上看到的微信消息等等都属于APP消息推送行列。使用极光推送, C# 服务端推送到 Demo App,Android 手机收到推送,整理为十个步骤,使用十分钟左右,完成从注册账号到 Android 手机上的 Demo App 收到推送。步骤1.注册极光账号 注册页面:https://www.jigu
2021-12-25 10:33:49
2417
原创 在 ASP.NET Core 中使用托管服务实现后台任务
在 ASP.NET Core 中,后台任务作为托管服务实现。托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。ASP.NET Core 辅助角色服务模板可作为编写长期服务应用的起点。通过辅助角色服务模板创建的应用将在其项目文件中指定 Worker SDK:<ProjectSdk="Microsoft.NET.Sdk.Worker">要使用该模板作为编写托管服务应用的基础:创建新项目。选择“辅助角色服务”。选择“下一步”。在“项目名称”字段.
2021-12-24 15:40:00
963
原创 C#的dapper使用
Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。这些ORM都可以轻松给你搞定。ORM给我们开发带来便利时,性能也是一个让我们不得不考虑的问题。一般
2021-12-18 21:31:16
976
原创 对象到对象映射-AutoMapper
AutoMapper 是一个对象-对象映射器,可以将一个对象映射到另一个对象。用来解决一个看似复杂的问题,这种类型的代码编写起来相当枯燥乏味,官网地址:http://automapper.org/官方文档:https://docs.automapper.org/en/latest/入门AutoMapper支持使用静态服务位置构造“自定义值解析器”,“自定义类型转换器”和“值转换器”的功能: var configuration = new MapperCo
2021-12-17 21:42:51
301
原创 C# 使用阿里云发送短信
最近有个项目,短信服务使用的是阿里云的,想要使用阿里云平台的短信服务,首先要注册一个阿里云账号,由于发送短信消息需要用到短信签名、短信模板ID(已添加并通过审核)1、注册阿里云账号(地址:https://www.aliyun.com/)2、添加短信签名和短信模板3、短信服务相关引用dll添加引用引用——>管理NuGet程序包——>搜索Aliyun.Acs.Core——>安装usingAliyun.Acs.Core;usingAliyun.Acs.Core....
2021-12-15 22:13:23
1075
原创 Jira8.5 for Windows 安装&使用
1 安装https://confluence.atlassian.com/adminjiraserver/installing-jira-applications-on-windows-938846835.html1.1 配置数据库https://confluence.atlassian.com/adminjiraserver/connecting-jira-applications-to-sql-server-2012-938846858.html本次安装使用数据库 SQL Server20.
2021-12-11 02:55:09
1817
原创 如何在控制台应用程序中使用分布式日志Exceptionless
Exceptionless 在所有类型的 .NET 应用程序中运行。让我们来看看如何在控制台应用程序中开始使用 Exceptionless。要使用 Exceptionless,请像这样添加 Exceptionless 命名空间:usingExceptionless;完成后,定义 Exceptionless 客户端:varclient=newExceptionlessClient("YOURAPIKEY");现在可以像这样向 Exceptionless 发送事件:...
2021-12-05 10:11:07
849
原创 ASP.NET Core Filter如何支持依赖注入
概述通过使用 ASP.NET Core 中的筛选器,可在请求处理管道中的特定阶段之前或之后运行代码。内置筛选器处理任务,例如:授权(防止用户访问未获授权的资源)。响应缓存(对请求管道进行短路出路,以便返回缓存的响应)。可以创建自定义筛选器,用于处理横切关注点。横切关注点的示例包括错误处理、缓存、配置、授权和日志记录。筛选器可以避免复制代码。例如,错误处理异常筛选器可以合并错误处理。ASP.NET Core Filter如何支持依赖注入?可以通过全局注册,支持依赖注入。通过TypeFilt...
2021-03-26 09:38:25
268
原创 windows服务autofac注入quartz任务
概述Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做组件处理。我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了。下面我们来看下在windows服务quartz任务下,如何使用注入信息autofac,以实现和web其他项目使用公共类库。主要实现1、Pro...
2021-03-25 09:16:18
347
原创 文件存储到amazon S3
概述由于云技术的日益成熟,越来越多的公司存储文件时会用到云技术,而亚马逊就提供了一个日益成熟的云环境的服务器群方便存储的文件。Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。这意味着各种规模和行业的客户都可以使用 S3 来存储并保护各种用例(如数据湖、网站、移动应用程序、备份和还原、存档、企业应用程序、IoT 设备和大数据分析)的数据,容量不限。Amazon S3 提供了易于使用的管理功能,因此
2021-03-24 09:15:45
304
原创 windows下Redis的安装
概述Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。Redis提供诸如字符串、哈希、列表、集合、带范围查询的排序集合、位图、超日志、地理空间索引和流等数据结构。Redis具有内置的复制、Lua脚本、LRU逐出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster的自动分区提供高可用性。下载地址:https://github.com/tporadowski/redis/releases。Redis 支持 32 位和 64 位。
2021-03-23 09:33:24
167
原创 一日一技:ASP.NET Core 判断请求是否为Ajax请求
概述在写后台程序时,有时候需要知道客户端发送的是普通的请求,还是ajax 请求,最近在做项目的时候,有些地方需要判断当前的请求是不是ajax。特地找了下发现,jQuery 发出 ajax 请求时,会在请求头部添加一个名为 X-Requested-With 的信息,信息内容为:XMLHttpRequest。Ajax请求的request headers里都会有一个key为x-requested-with,值为XMLHttpRequest的header,所以我们就可以使用这个特性进行判断。判断是.
2021-03-22 09:15:25
333
原创 使用GZipStream实现压缩和解压缩
概述之前做项目,涉及到存入到数据库或者http传输的数据量比较大,这个时候,就需要考虑在存入数据库或者发送传输之前,将数据压缩下,当从数据库中取出时,再解压还原数据。特地找了下发现有GZipStream可以实现这个功能。此类表示gzip数据格式,该格式使用行业标准算法进行无损文件压缩和解压缩。该格式包括用于检测数据损坏的循环冗余校验值。gzip数据格式使用与DeflateStream类相同的算法,但可以扩展为使用其他压缩格式。该格式很容易以专利未涵盖的方式实施。从.NET Framework 4.5开始
2021-03-21 18:55:43
324
2
原创 爬取异步请求(XHR/JS)数据方法
概述之前在做爬虫的时候,比如在爬取到https://www.1688.com/?spm=a261p.8650866.0.0.2dfa36c3tjLrCQ网页的时候,发现很多内容明明在浏览器看得见,但是请求下来的内容却没有,于是打开F12查看Network发现,如下: 从这里我们就可以清楚的在xhr返回的header里面看到异步请求的url,这里我们直接访问该url(或者在preview里面可以看到返回的数据)可以看到返回的数据就是需要数据,也就是我们要爬的数据。接下来就是进行url格式分析,一般都会有
2021-03-19 09:11:36
1966
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人