泛型-编程思维

简介 C# 中的泛型是一种强大的特性,允许你编写可重用的代码,而不必为不同的数据类型编写多个版本。通过泛型,你可以创建类、方法和接口,以便它们可以在编译时指定具体的数据类型。这使得代码更加灵活、类型安全,并且可以提高性能。 案例 泛型允许我们编写代码时指定类型参数,以便在运行时使用不同的实际类型。假设我们有一个简单的需求:实现一个数组的查找最大值功能。我们可以比较使用泛型前后的实现 不使用泛型

使用c#和memorycache组件实现轮流调用apikey以提高并发能力-编程思维

文章信息 标题:使用C#和MemoryCache组件实现轮流调用API Key以提高并发能力的技巧 摘要:本文介绍了如何利用C#语言中的MemoryCache组件,结合并发编程技巧,实现轮流调用多个API Key以提高系统的并发能力。通过示例代码和详细说明,读者将了解如何有效地管理API Key的调用次数限制,并优化系统性能。 Title: Techniques for Using C# and

深拷贝和浅拷贝-编程思维

前言 浅拷贝(shallow copy)和深拷贝(deep copy)是在编程中经常遇到的概念,尤其在处理数据结构时很重要。它们是针对对象(object)或数据结构(data structure)进行复制操作时的两种不同方式。 浅拷贝和深拷贝是在编程中常见的两种拷贝对象的方式,它们在拷贝对象时的行为和效果有所不同。 浅拷贝(Shallow Copy) 浅拷贝创建一个新对象,并将原始对象的字段

进程与线程、同步与异步-编程思维

前言 在计算机编程中,同步与异步、进程与线程是两组基本概念,对于理解并发编程至关重要。本文将深入探讨这些概念,解析它们的含义、特点以及在实际编程中的应用。 进程和线程 进程(Process)和线程(Thread)是计算机科学中重要的概念,它们都与程序执行和并发相关。 进程: 定义:进程是操作系统中的一个独立实体,是程序执行的一个实例。一个进程可以包含多个线程。 内存空间:每个进程都有独立的内

c#、.net与clr-编程思维

C# C#(C Sharp)是一种由微软公司开发的通用、面向对象的编程语言,它被设计用来构建.NET平台上的各种应用程序。.NET是一个软件开发框架,它提供了一系列工具和库,使开发人员能够构建各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和服务等。 C#是.NET框架中最常用的编程语言之一,但并不是唯一的选择。除了C#之外,开发人员还可以使用其他语言,如Visual Basi

.net core webapi项目部署iis后swagger 404问题解决-编程思维

.NET Core WebAPI项目部署iis后Swagger 404问题解决 前言 之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解下iis如何部署WebAPI项目。 环境准备 iis ASPNETCoreModuleV2 重点 .NET Core Runtime iis的配置这里就不讲了,主要讲解.NET Core项目部署

powershell 批量修改图片文件名-编程思维

$p = "F:\book\Other\传统文化\书法\吴让之篆书吴均帖\Images" Set-Location $p $str = "风烟俱净天山共色从流飘荡任意东西自富阳至桐庐一百许里奇山异水天下独绝水皆缥碧千丈见底游鱼细石直视无碍急湍甚箭猛浪若奔夹岸高山皆生寒树负势竞上互相轩邈争高直指千百成峰泉水激石泠泠作响好鸟相鸣嘤嘤成韵蝉则千转不穷猿则百叫无绝鸢飞戾天者望峰息心经纶世务者窥谷忘反横柯

构建satelliterpc:基于kestrel的rpc框架(整体设计篇)-编程思维

背景 之前在.NET 性能优化群内交流时,我们发现很多朋友对于高性能网络框架有需求,需要创建自己的消息服务器、游戏服务器或者物联网网关。但是大多数小伙伴只知道 DotNetty,虽然 DotNetty 是一个非常优秀的网络框架,广泛应用于各种网络服务器中,不过因为各种原因它已经不再有新的特性支持和更新,很多小伙伴都在寻找替代品。 这一切都不用担心,在.NET Core 以后的时代,我们有了更快、

[c#学习笔记]lock锁的解释与用法-编程思维

写在前面 前几时在写业务代码的时候,看到有用到lock这个方法的,而我竟然并不知道是做什么用的,所以查找了许多博客文章,弄懂了百分之七八十,在此做下笔记。 感谢博客 http://www.cnblogs.com/wolf-sun/p/4209521.html 的解说,该篇博客大部分内容源自于此。 lock 官方MSDN的说法: lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会

[c#学习笔记]类型对象指针和同步块索引-编程思维

写在前面 看《CLR via C#》第四章时,看到了类型对象指针和同步块索引这两个概念,不知如何解释,查看过相关资料之后,在此记录。 类型对象指针 《CLR via C#》中的原话: 任何时候在堆上创建对象,CLR都自动初始化内部的“类型对象指针”成员来引用 与对象对应的类型对象。 在JIT编译器将IL代码转换成本机CPU指令的时候,利用程序集的元数据,CLR提取与代码中类型有关的信息,创建一

[c#学习笔记]func委托与action委托-编程思维

学习一项新知识的时候,最好的方法就是去实践它。   前言  《CLR via C#》这本神书真的是太有意思了!好的我的前言就是这个。 Fun 如果要用有输入参数,有返回值的委托,那么Func委托将满足你的要求。 Func泛型委托引用了一个带有一个返回值的方法,它可以传递0或者多到16个参数类型,和一个返回类型。 它可以没有传递参数,但是一定要有返回类型。 Func<out TResu

基于.netcore开发博客项目 starblog-编程思维

前言 StarBlog 第一期规划的功能基本完成了,我想着在春节前应该可以把第一期的系列文章完结掉,那么在差缺补漏阶段就剩下开发项目的最后一个环节——部署了。 PS: 事实上,还有一个很重要但又经常被略过的测试环节我们没有提到,因为时间关系,第一期规划我没有写单元测试和集成测试,在开发中,测试环节是必备的,我也立个flag会在之后补充这部分测试的代码。 关于 dotnet 的测试,可以看看我之

asp-net-core学习笔记:3.使用signalr实时通信框架开发聊天室-编程思维

SignalR牛刀小试 在MVP杨老师的博客里看到这么个东西,我还以为是NetCore3才推出的新玩意,原来是已经有很多年的历史了,那看来还是比较成熟的一个技术了。 简介 SignalR是一个.NET Core/.NET Framework的开源实时框架,SignalR的可使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式。 Sign

记一次c#面试-编程思维

最近参加了工作后的第一次面试,虽然最终没谈成,但是收获还是不少,不管是技术还是面试经验还是得多多积累呀。这一次面试与在学校时候参加过的面试区别还是挺大的。校园招聘的面试问的问题似乎都比较具体,直接针对技术点,这样的问题如果知道就是知道,不知道嘛就是不知道。。。而这一次面试问的问题大多都非常粗犷,似乎是面试官想让自由发挥的空间更大,也就是尽量把自己理解的内容说出来就好。。。然而我有好几个问题都是能

[c#]lockbits使用笔记-编程思维

昨天想基于一张图片做个手机锁屏来着,原图如下:主要是嫌白底太丑了,一开始是想画图工具直接油漆桶伺候,然而一浇上去就发现问题了,变成了这样:看来得手工处理一下把底色统一了,原图分辨率挺高的,SetPixel显然会太慢,所以只能LockBits咯。LockBits的使用方法和参数什么的都可以百度和MSDN,不多说,直接贴一个BitmapWrapper先: 1 unsafe class Bitma

[c#]浅谈协变与逆变-编程思维

看过几篇说协变与逆变的博客,虽然都是正确无误的,但是感觉都没有说得清晰明了,没有切中要害。那么我也试着从我的理解角度来谈一谈协变与逆变吧。 什么是协变与逆变 MSDN的解释:https://msdn.microsoft.com/zh-cn/library/dd799517.aspx 协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型,后者指能够使用比原始指

[c#]剖析异步编程语法糖: async和await-编程思维

一、难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await。然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模式对于习惯了传统模式的人来说实在是有些难以接受,不难想象有多少人仍然在使用手工回调委托的方式来进行异步编程。C#中的语法糖非常多,从自动属性到lock、using,感觉都很好理解很容易就接受了,为什么