- 博客(57)
- 收藏
- 关注

原创 线程基础篇-线程同步
Lock是将一段代码定义为临界区,临界区中的代码在同一时刻只能有一个线程访问,当临界区代码执行时,其他线程调用会被阻塞,需等待资源释放。语法:private object locker=new object();void Method(){ lock(locker) { 代码块… }}注意:1 lock不能锁定空值2 lock不能string类型,因为字符驻留机制,无法被释放3 lock不能锁定值类型4 lock避免锁定public类型或不受程序
2021-04-15 09:16:04
170

原创 线程基础篇-线程和进程
什么是进程进程是操作系统进行资源分配和调度的基本单位,进程是独立运行的程序进程的基本用法Process 是System.Diagnostics命名空间中的类常用属性常用方法实例应用什么是线程线程是进程的执行单元,一个进程至少包含一个线程多线程就类似排队买票,单线程只有一个窗口开放,多线程是多个窗口同时开放,但某一时刻只有一个线程在执行,因此多线程并不能提高程序的运行速度,但能提高程序的运行效率,提高CPU的使用率。线程的基本用法常用属性常用方法前台线程和后台线程前台线
2021-04-07 09:06:15
142

原创 LINQ基础篇(下)
分页 Skip Takevar query = DataSource.Skip((PageNo-1)*PageSize).Take(PageSize).ToList();Skip 跳过多少个元素Take取出多少个元素SkipWhile 逐一判断直到不满足条件,将该元素及其后的元素取出TakeWhile 逐一判断取出满足条件的元素Except语法 a.Except(b)作用 a中去除b中元素后剩余部分 List<string> strListA = new List<
2021-02-02 14:19:32
127

原创 面向对象关键字-new virtual override base
virtual 虚拟的被virtual标记的方法或属性,本质上是在内存空间中做了定义,但其对应的地址是不固定的,是在运行时根据规则来判定的。A类对象名=new B类(),A类叫做申明类,B类叫做实例类规则:1 当调用方法时,先检查在申明类中该方法是否是virtual,如果不是虚方法则直接执行,如果是虚方法则需检查实例类。2 在实例类中检查是否有override该方法,如果有则直接调用该方法,如没有则在其父类中逐级查找,直到找到第一个override方法。注意 被virtual标记的方法被ove
2021-01-20 13:56:15
142

原创 echarts+mvc调试项目部署局域网
1背景介绍 最近有开发数据统计的网站,老板需及时投放到显示屏,但程序仍需改动,只能先部署到局域网,测试产品不能部署服务器(服务器负担过重)开发框架MVC4+sql server+echarts,由于需每隔5分钟刷新,还有ajax,手写ajax+echarts调用生成图表,话不多说,上图。2 部署过程a 从网上找资料结合之前的认知,做IIS配置 如图所示站点名称,物理路径,端口...
2020-01-03 14:33:18
550

原创 C# 读取Excel到DataTable两种方式对比
方式一 OLEDB读取 数据库引擎优点:读取速度快,依据sheet排序读取缺点:对于Excel版本依赖强,无法读取指定sheet错误提示:本地计算机未指定Microsoft.ACE.OLEDB.12.0解决方法:win7(64位)+office 2010(64位) 更改目标平台为X86win10(64位)+office 2010(64位) 更改目标平台无效,下载安装Acce...
2019-07-25 13:13:46
2590
1
原创 诗歌摘抄-
且夫天地之间,物各有主,苟非吾之所有,虽一毫而莫取。惟江上之清风,与山间之明月,耳得之而为声,目遇之而成色,取之无尽,用之不竭,是造物者之无尽藏也,而吾与子之所共适。总角之宴,言笑晏晏,信誓旦旦,不思其反。方其破荆州,下江陵,顺流而东也,舳舻千里,旌旗蔽空,酾酒临江,横槊赋诗,固一世之雄也,而今安在哉?歌曰:“桂棹兮兰桨,击空明兮溯流光,渺渺兮予怀,望美人兮天一方”。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天,纵一苇之所如,凌万顷之茫然。其声呜呜然,如怨如慕,如泣如诉,余音袅袅,不绝如缕。
2024-09-27 09:33:30
156
原创 警句---
搞计算机方面的,最好以3个月或者半年为一个阶段,做些技术上和战略上的提升,这样不断迭代提高后,对于信心和技术会有很大改善。另外,普通大众往往会不知不觉接受各种负面、焦虑的信息,这其实挺不好的。要学会拒绝接受各种负面信息。还有不能在一个封闭的环境里呆太久,太久了,就忘记自己有翅膀了,要学会透透气。这不是我的,这不是我。
2024-09-27 09:32:27
148
原创 VBA解除Excel工作表保护
2 Alt + F11 打开代码编辑,点击任意代码编辑项,将如下代码复制,并运行。工作表保护后无法编辑内容,可能是密码忘记,不可暴力破解隐私。1 打开需的Excel。Excel工作表保护解除。
2024-09-27 08:47:06
2336
原创 VBA过程代码密码解除
2 Alt + F11 打开代码编辑,新建模块将以下代码复制。1 打开需破解的Excel,新建一个空白Excel文档。3 点击Sheet1,将以下代码复制。4 运行破解和恢复即可。VBA过程代码密码破解。
2024-09-27 08:43:37
1081
原创 Halcon实用系列1-识别二维条码
可以看出几十毫秒可以解读条码,如要识别其他类型的二维码,可更改create_data_code_2d_model算子的参数。在做项目时,之前使用的是某康的智能读码器,综合考虑成本,可通过相机拍照来读取图片的二维码,我这边用Halcon来实现。2 在VS中添加Halcon的引用,并将方法调整,我这里是结合OpencvSHarp。那么如何将Halcon代码转化为C#可调用的方法?1 先将Halcon代码导出,得到cs文件。此处还涉及Mat对象转换为HObject。
2024-09-27 08:34:58
671
原创 Halcon基础系列1-基础算子
选择-select_shape (ConnectedRegions, SelectedRegions, 'ratio', 'and', 0.7437, 10)文字显示-disp_message (WindowHandle, '好坑', 'image', 0, 0, 'red', 'false')打开-dev_open_window (0, 0, 712, 512, 'black', WindowHandle)异步采集-grab_image_async(Image,AcqHandle,-1.0)
2024-09-26 19:28:58
499
原创 委托和事件
委托的定义是对被委托调用的一种规范定义,如返回值,参数等,可以看做是一个抽象方法。Func<参数类型,返回值类型> 委托对象=((参数)=>{具体实现});事件用event关键字,但在使用方面与委托一样,其中+=是订阅,是多播委托。Action<参数类型> 委托对象= ((参数)=>{具体实现});委托名 委托对象=delegate(参数){具体实现};委托名 委托对象=new 委托名(被调用的方法)委托名 委托对象=((参数)=>{具体实现});委托的定义与方法的定义类似,但委托是一种类型。
2024-09-26 19:23:21
199
原创 Dos.ORM简单说明
2 Dos.ORM仅支持DbFirst模式,即必须先有数据库,这里以Sql Server为例。3 新建项目,添加引用Dos.ORM.dll,配置数据库连接,新建数据库连接类。更新 Update UpdateAll。UpdateAll是修改所有字段。查询 From FromSql。4 生成数据库实体类。
2024-09-26 19:13:42
492
原创 SqlSugar使用
1 特点 Sqlsugar是一款轻量级的ORM,支持DB First、Code First、Model First,大量语法糖,Lambda表达式,支持大部分数据库。2 sqlsugar连接。
2024-09-26 19:10:25
555
原创 如何在调试状态下部署局域网网站
开发框架MVC4+sql server+echarts,由于需每隔5分钟刷新,还有ajax,手写ajax+echarts调用生成图表,话不多说,上图。最近有开发数据统计的网站,老板需及时投放到显示屏,但程序仍需改动,只能先部署到局域网,测试产品不能部署服务器(服务器负担过重)a 从网上找资料结合之前的认知,做IIS配置 如图所示站点名称,物理路径,端口可取几万,保准不被占用。b 配置完成后,本地都无法访问,结合网上资料才知道端口被防火墙允许,且还有后续配置未完成。多动手操作,积累经验。
2024-09-26 18:41:43
298
原创 gRPC-浅试
指定grpc_csharp_plugin.exe路径:--plugin=protoc-gen-grpc=packages\Grpc.Tools.2.50.0\tools\windows_x64\grpc_csharp_plugin.exe。指定protoc.exe路径:packages\Grpc.Tools.2.50.0\tools\windows_x64\protoc.exe。定义LogService.proto文件,如下代码:我这里是将服务放在gRPCServer下,也可以放在其他项目下。
2024-09-26 18:30:54
233
原创 RestSharp简介
RestSharp是一个轻量级HTTP客户端库,主要功能是通过HTTP对远程资源进行同步异步调用,可将请求主体序列化为JSON或XML并反序列化相应。参数类型:查询、URL段、标头、cookie、正文。请求主体的方式:JSON、XML和表单数据。
2024-09-26 18:20:55
530
原创 EF基础篇-Code First
Code First 通过代码反向生成数据库,无需关心数据库方面1 新建一个控制台项目2 打开NuGet程序包管理,添加EntityFramework添加完成后查看是否有如下两个引用3 代码编写及配置新建Goods类 class Goods { [Key] public int GID { get; set; } public string GName { get; set; } public int GPrice { get; set; } public int S
2021-02-24 16:12:24
482
原创 EF基础篇-Model First
Model First 是先有模型,再根据模型创建数据库,进行相关的数据操作1 新建一个控制台程序2 右键添加 新建项 选择如图的ADO.NET实体数据模型3 实体数据模型向导 选择如图空EF设计器模型4 模型构造 完成上一步后,得到如图的设计文件,右键或从工具箱中拖拽实体实体添加完成后得到如图的实体模型5 由模型构建数据库 右键选择“根据模型生成数据库”数据库连接部分6 打开数据库验证7 实例操作进行数据新增和查询 using (var scContext=new
2021-02-23 14:54:09
424
2
原创 EF基础篇-DB First
EDM entity data model 实体数据模型Conceptual models 概念模型Mappings 连接Storage models 存储模型Orm object relational mapping 对象关系映射DB first1 新建一个控制台程序2 右键点击添加,新建项,如图,选择ADO.NET实体数据模型3 模型配置选择来自数据库的EF设计器数据库连接配置和测试选择所需的表、视图,点击完成文件分析如图edmx文件是实体属性
2021-02-06 09:52:38
746
原创 LINQ基础篇(中)
聚合函数Max 最大值Min 最小值Sum 求和Average 求平均值Aggregate 自定义累计Count 统计元素个数LongCount 统计元素个数返回long型代码例子 List<int> tempList = new List<int> { 56,34,23,21,78,99 }; var maxValue = tempList.Max(); var minValue = tempList.Min(); var sumValue = tempLi
2021-02-01 09:47:27
232
2
原创 LINQ基础篇(上)
LINQLanguage Integrated Query 语言集成查询举个例子 int[] scores = new int[] { 65,50,45,90,87,65}; Console.WriteLine("高分有:"); //方法一 var highsore = from score in scores where score > 80 select score; var highscore2 = scores.Where(score =>
2021-01-27 08:41:41
141
原创 序列化和反序列化
serialize(序列化)和deserialize(反序列化)常用的两种序列化方法二进制和xmlBinaryFormatter代码示例[Serializable]public class Person{ public string name; public int age; [NonSerialized] public string sex; public void SayHi() { Console.WriteLine("我叫{0},今年{1}岁,我是{2}",t
2021-01-23 08:56:31
93
原创 抽象类和接口
抽象类abstract 修饰抽象类是一种比较特殊的类特殊性:1 不能被实例化2 抽象类可包含抽象方法和属性,也可以包含非抽象的成员,但抽象方法一定存在于抽象类中3 抽象基类的方法的抽象成员必须在具体派生类中重写(override)4 抽象类满足类的单一继承和继承传递性public abstract class Animal{ public void Eat() { Console.WriteLine("吃饭"); } public abstract void Run();
2021-01-20 14:22:42
93
原创 面向对象三大特征之一多态
多态-不同对象作用于相同方法,呈现的结果不同表现形式为A类 对象名=new B类() A类和B类之间存在直接或间接的继承关系,A类叫做申明类,B类叫做实例类运行时多态:重载(overload)编译时多态:重写(override)重载:方法名相同,形参的类型个数顺序不同,只与形参有关,与返回值无关在这里插入代码片...
2021-01-20 11:26:07
94
原创 面向对象三大特征之一继承
继承-类似于现实世界中的子承父业,实现字段、属性、方法(构造方法例外)的继承,但私有的是无法访问的,将类和类之间进行关联,增加系统的耦合性,被继承的类-父类或基类,继承的类-子类或派生类。代码重用性-子类继承父类的非私有的成员代码例子 class People { private int _age; private string _name; public int Age { get;
2021-01-17 16:20:47
99
原创 面向对象三大特征之一封装
封装是对方法、字段、属性等成员的一种保护,是将客观的现实世界抽象为类、对象等,将操作等集中在一个类中,通过实例化的对象调用属性、方法,而不需要连接类内部的实现,且类内部的改变不会影响对象对属性、方法的调用C#中常用的修饰符public 公共的,人和地方都能访问private 私有的,只能在类内部访问(类中的成员默认是私有的)protected 受保护的,类内部和子类中能访问internal 内部的,在程序集(命名空间)中可以访问(类默认是内部的,可以修改为公共的)封装最常见的例子是属性对字段的保
2021-01-17 11:39:16
133
原创 const和readonly
常量的定义常量一经赋值不能再改变其值const 静态常量在类型前加const修饰,在定义时为其赋值,因为在静态常量是在编译时进行解析,将常量的值替换初始值readonly 动态常量在类型前加readonly修饰,定义时默认有初始值,在运行时可进行赋值由于const修饰是静态常量,所以被static修饰时会报错const 可以修饰类中和方法中的成员,而readonly只能修饰类中成员public static const int num = 1;public static readonly
2021-01-17 11:25:51
135
1
原创 ref、out和params
值传递和引用传递形参:方法定义处定义的参数实参:方法调用时提供的参数值传递:方法传递值,值传递实参和形参都会在栈中占用内存,相互之间并不影响,而是形参限制了实参的类型,形参作为临时变量在调用结束后即销毁。引用传递:方法传递引用,引用传递实参和形参在堆中占用同一块内存,形参的改变会影响实参的值。例子: public static bool Test(int i,string s) { i = i + 2; s = (i + 5).To
2021-01-17 11:05:46
187
原创 分不清IEnumerable和IEnumerator
首先看几个单词Enum 枚举类型IEnumerator 枚举器IEnumerable 可枚举从单词上大概可以看出IEnumerator是实际枚举器查看源码源码分析:1 IEnumerable接口仅定义了一个返回IEnumerator类型的GetEnumerator方法2 IEumerator接口定义了三个方法,Current获取当前的对象返回Object类型,MoveNext指针下移,Reset将指针重置3 IEnumerator才是真正的集合遍历器,为了实现集合对象的遍历,必须实现IE
2021-01-17 09:32:55
132
原创 struct和class异同
struct 和 class的异同一图理解struct和class的异同1 相同点A struct和class是同一等级的,属于命名空间下B 可以定义字段、属性、方法、构造器等C 有默认的无参构造方法2 不同点A 定义语法关键字不同(struct class)B struct是值类型,class是引用类型,struct存储在栈中,但其中定义的引用类型是存储在堆中的C struct中字段不能赋初始值,class中字段没有影响D struct不能定义无参数的构造方法,且在有参构造函数中必
2021-01-17 09:23:25
1519
原创 string和StringBuilder
string 字符串定义语法:string s=”abc” string str=newstring(new char[]{‘a’,’b’,’c’})string和Stringstring is an alias for String in the .Net Frameworkstring 是String的别名,string是C#的类型,String是.Net Framework的类型string经过编译变成String,为了符合语法,建议使用stringImmutable字符串不变性代
2021-01-17 09:04:06
132
原创 无法逃避的装箱和拆箱
概念装箱:由值类型转换为引用类型拆箱:由引用类型转换为值类型代码解析逐步分析以上代码:1 int i=5; 在栈中新建变量i,值为52 object o=i;在堆中新建变量o,储存实际值5,并将5在堆中的地址储存在栈中3 int j=(int)o;在栈中新建变量j,通过栈中o的地址访问对应内存的值,并将该值储存在栈中j的地址上图解补充从代码分析和图解可以看出装箱和拆箱存在以下问题:1 占用空间,装箱和拆箱在堆和栈上开辟空间,已占用的空间无法及时回收2 性能影响,拷贝占用CPU,额
2021-01-17 08:33:20
348
1
原创 C#中的堆和栈
什么是栈?什么是堆?什么是值类型?什么是引用类型?值类型中的引用类型,引用类型中的值类型。栈(stack)概念:内存中连续存放的区域,空间小,速度快,存取按先进后出(FILO First In Last Out)比如一叠盘子,存:一个个的堆叠,取:从上取存取:主要是值类型和引用类型的地址等值类型概念:继承于System.ValueType,它是System.Object的子类一般存放于栈中主要值类型准确的说值类型的存放与定义的区域有关,在值类型(struct)中定义的引用类型是存放在
2021-01-16 17:00:09
464
原创 GC原理知多少
GC (Garbage Collector) 垃圾回收器 GC是对内存的管理,计算机的内存是有限的,早期的C/C++是没有GC的,需要编程者手动回收内存,主要是那时候内存小,程序员重视对内存的管理,但是也存在内存回收时机和忘记回收的问题,会造成内存泄露的灾难。 随着Java的JVM对内存的管理的发展,以及随之而来的CLR对内存的管理,在内存管理上,逐步解放程序员的对内存的管理,使程序员可以将精力集中在功能实现等方面,但是GC存在两个问题:1 GC不能回收非托管代码(stream文件
2021-01-16 16:53:59
218
原创 C# 编译运行原理
CSC.exe是.Net Framework 下的编译器作用:将C#源程序编译程序集,程序集指EXE或DLL文件编译过程进行语法检查和程序分析MSIL IL CIL 三者是同一概念,IL(Intermediate Language)微软中间语言,它介于汇编语言和高级语言JST(Just in Time)即时编译器作用:将MSIL编译成本机指令,实际是优化以匹配操作系统和CPUCLR(Common Language Runtime)公共语言运行时,是.Net 框架的核心之一,本质是一段驻留在内存中
2021-01-16 16:49:13
644
原创 Process
public static StringBuilder sb = new StringBuilder(); public static bool Start(List<string> pro) { bool result = false; try {...
2019-07-02 19:53:44
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人