C#
绿浪1984
这个作者很懒,什么都没留下…
展开
-
c# c++内存转换
首先传入托管的内存,c#层很可能会把它gc掉,而c++还在使用,而且托管的mem它的指针地址可能会发生改变,因此直接传给c++可能拿到的地址是错误的)有时需要在c++中分配一块处理好的内存,然后返回给c#来使用,如c++中某个接口 int func(int** data) (注意这里要使用指针的指针,因为data是得到的结果)//调用c++的函数,使unmanaged_ptr指向c++里分配的内存,注意这里用out ,才能与c++里面的**匹配。//将非托管内存拷贝成托管内存,才能在c#里面使用。转载 2023-02-01 15:49:13 · 227 阅读 · 0 评论 -
powershell ISE 多个选项卡,替换命令行黑窗口
替代运行多个控制黑窗口,在powershell中多个选项卡来代替原创 2023-01-10 16:59:00 · 280 阅读 · 0 评论 -
c++ 批量导出c# 函数,格式
c++ 给c#提供导出函数,可以 快速导出,只需要添加cpp文件,原创 2022-09-12 11:03:17 · 258 阅读 · 0 评论 -
wpf 单个字母键快捷键,示例
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); List<Key> keys = new List<Key> { Key.B, Key.A, Key.F1 }; foreach (var item in keys) ...原创 2021-10-29 10:48:19 · 138 阅读 · 0 评论 -
vs release编译
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.com" "SinoRail.Metro.sln" /Build "Release|x64"pause原创 2021-01-18 13:14:18 · 361 阅读 · 0 评论 -
性能
性能指标与测量响应与吞吐吞吐量越大,响应会越差响应越好,能支持的吞吐量就好越高如果吞吐量很少,响应会非常稳定性能目标的定义在不超过1000个并发活跃请求的情况下,查看缺陷情况从请求开始到响应不超过300ms常见性能指标cpu内存磁盘网络数据库访问耗时常见性能测试工具windows性能计数器VS 性能探查器, 分析CPU,内存占用DotTrace,调用时间跟踪,内存分析DotMemory...原创 2020-12-22 14:39:16 · 81 阅读 · 0 评论 -
NetCore grpc https部署以及 部署后客户端访问
创建.netcore grpc服务制作pfx证书创建gRPC 服务项目设置appseting.json 文件中对证书的配置{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "certif原创 2020-12-02 14:47:46 · 862 阅读 · 0 评论 -
netcore 集成autofac 或者集成Scrutor 实现程序集类型 批量 注入
wpf,console类程序,集成 public static void Run() { var serviceP = new ServiceCollection().AddTransient<A>(); var autoContainer = new ContainerBuilder(); autoContainer.Populate(serviceP); aut原创 2020-11-20 16:45:38 · 316 阅读 · 0 评论 -
netcore 选项模式应用
IOptions public class AppConfigDemo { public string Name { get; set; } public string StartDate { get; set; } public string EndDate { get; set; } public Behavior Behavior { get; set; } }.原创 2020-11-20 16:06:23 · 133 阅读 · 0 评论 -
.netcore各种配置文件读取,包含json,xml,environment,commandline,ini等等
根据读取不同文件可引入不同的包,示例代码 public static void Run(string[] args) { var keyValueDic = new Dictionary<string, string> { ["Name"] = "Windy", ["Start"] = "2020-5-1", ["End"] = "2020-5-13", }; var config = new ConfigurationB原创 2020-11-20 15:56:52 · 582 阅读 · 0 评论 -
CPU 原理
多级缓存寄存器1级缓存2级缓存3级缓存主存外存To Business 缓冲使用结构体,缓存使用类,视频客户端使用缓冲,视频服务端使用缓存栈是CPU直接操作的,缓冲和缓存是虚拟的,宏观概念。CPU ---- CPU 1、2、3级缓存 ---- 内存...原创 2022-10-24 10:17:31 · 50 阅读 · 0 评论 -
数据库索引学习
聚集索引把数据有序摆放,物理排序,聚集索引只有一个,但是可以多个字段,换聚集索引,很耗时,很多硬盘操作,非聚集索引不影响数据的物理排序,但是重复存储一个数据和位置查找快,但是有维护索引的成本,不是越多越好,非聚集索引,可以多个,每个非聚集索引也可以多个字段,适合经常查询的字段,名词、账号,非聚集索引不能运算,不能like‘%%’建立索引的原则主键是必须建立索引的,(推荐数值主键,性能最高)外键列也要索引,经常查询的建立索引,经常在where里面作为查询条件的,orderby ,原创 2020-10-18 20:21:50 · 68 阅读 · 0 评论 -
SOA架构
数据总线分布式事务 DTC 命令方式 异步队列Http服务框架WebService、WCF、WebAPI服务端内部应用框架RPC,gRPC,.Net Remoting原创 2020-10-18 10:20:36 · 62 阅读 · 0 评论 -
.netcore 3.1部署在dock上
参考1. 拷贝。net程序发布文件夹到linux1.1配置好dockfile文件#引入镜像,低版本 docker 去掉 AS base#换成别人做的阿里镜像#FROM registry.cn-hangzhou.aliyuncs.com/newbe36524FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base#配置工作目录 相当于cdWORKDIR /app #暴露容器端口,此端口与程序运行路径一致,可E原创 2020-10-17 11:13:41 · 274 阅读 · 0 评论 -
分布式缓存 redis
本地缓存缺点:容量有限,多服务器间不能共享分布式缓存Memcached,Nosql-RedisNosql,特点,基于内存,没有严格的数据格式, 不是一行数据的列必须一样丰富的类型Remote Dictionary Server(Redis)基于内存管理,实现5种数据库机构(应对各种需求),单线程单进程的程序,对外提供插入-查询-固化-集群固化方式,Virtual Memory 存储不经常访问的,可以配置,down会丢失数据AOF :数据变化记录日志,不常用Redis 不是数据原创 2020-10-16 08:50:22 · 118 阅读 · 0 评论 -
缓存策略
缓存方案有更新,清除所有缓存,殃及池鱼,有更新,精准删除,仅删除 满足更新条件的缓存无法检测 缓存是否是最新数据,因为可能真是数据被删除了,缓存服务器没法知道,过期策略,过期类型,Deadline,Duration,Value被动清理缓存,过期方式永久过期,绝对过期, 有个时间点,超过就过期滑动过期(相对), 多久之后过期,如果期间更新或查询,就延长过期时间。 主动清理缓存, 开启线程检测是否过期,清理缓存缓存的多线程访问会有问题,需要锁来控制访问,lock each on原创 2020-10-15 11:20:37 · 69 阅读 · 0 评论 -
c# 锁的概念
锁都是同一线程内不限制,仅在跨线程时互斥。同一线程内是不会死锁的,lock 关键字lock的底层本身是Monitor来实现的,所以Monitor可以实现lock的所有功能lock(obj){}lock(this){} 可能产生死锁,同一线程内锁定同一对象不会产生死锁。MonitorMonitor.Enter(obj)MOnitor.Exit(obj);以上两个锁的锁定对象obj 只能是引用类型,不能是null,string,值类型,注意:定义的锁对象应该是 私有的,静态的,只读原创 2020-10-14 10:00:37 · 1964 阅读 · 0 评论 -
架构师修养 AOP 及实践
AOP面向切面编程实现示例公共代码 public class User { public int Id { get; set; } public string Name { get; set; } public string Password { get; set; } } public interface IUserProcessor { void RegUser(User user);原创 2020-10-13 10:11:08 · 60 阅读 · 0 评论 -
架构师修养 适配器模式
类适配器模式继承原有类进行适配对象适配器模式面向接口进行适配接口适配器模式转换接口 interface IUse { void Use(); } class V110 { readonly string _Name; public V110(string name) { _Name = name; } public void Use11原创 2020-10-12 16:03:29 · 68 阅读 · 0 评论 -
架构师修养,静态代理,动态代理
静态代理interface IData { string GetImageUrl(); } class ImageProxy : IData { Image m_Image; public string GetImageUrl() { if (m_Image == null) { m_Image = new Image();原创 2020-10-12 15:44:40 · 54 阅读 · 0 评论 -
架构师修养,建造者模式
PCDirector PCDirector = new PCDirector(new LenovoPCBuilder());var pc = PCDirector.Build(); class PCDirector { readonly PCBuilder m_PCBuilder; public PCDirector(PCBuilder bd) { m_PCBuilder = bd; } p原创 2020-10-12 15:18:29 · 44 阅读 · 0 评论 -
状态模式 开关灯
状态模式 开关灯 调用LightStateContext lsc = new LightStateContext();Task.Run(() =>{while (true){lsc.Run();Thread.Sleep(1000);}});状态模式开关灯实现 class LightStateContext { BaseState CurrentState { set; get; } public LightStateContext()原创 2020-10-12 15:03:50 · 216 阅读 · 0 评论 -
架构师的修养3.1 建造者、装饰、适配器、代理模式
建造者模式将复杂对象的构建和表示分类,隐藏了复杂对象的构建过程,动态创建具有复合属性的对象。优点:具体的建造者之间互相独立,利于系统扩展,不影响其他模块客户端不必知道内部组成细节缺点:建造的产品有较多共同点,组成部分相似使用场景隔离复杂对象的创建和使用,相同的方法,不同执行顺序,产生不同事件结果多个部件都可以装配到一个对象中,但产生的运行结果不相同产品类非常复杂或者产品类因为调用顺序不同而产生不同作用初始化一个对象时,参数过多,或者很多参数具有默认值Builder模式不适合创建差异性原创 2020-10-12 13:37:09 · 86 阅读 · 0 评论 -
架构师修养1.1 工厂模式和策略模式的比较
工厂模式和策略模式的比较总结工厂模式可以做到的事情,策略模式都可以做到。策略模式可以做到的事情,工厂模式也可以做到,只是会变得麻烦工厂模式 有个工厂类,策略模式有个策略上下文工厂模式属于创建型模式, 关注对象创建,根据用户选择的条件创建对象,强调对象的异同策略模式属于行为型模式,关注行为选择,根据用户选择的策略,然后根据该策略做事,强调算法和实现的异同,策略可以任意替换简单工厂优点:只选择条件,不负责对象创建缺点:如果新增条件,需要修改工厂类。策略模式优点:选择交给客户端,服务端只需要执原创 2020-10-12 12:37:59 · 74 阅读 · 0 评论 -
架构师修养 --UML
类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。依赖关系 类A使用到类B,这种使用关系是偶然的、临时的、非常弱的,但是B类的变化会影响到A。 在代码层面,类B作为参数在A的方法中使用。 场景1 ![依赖关系](https://img-blog.csdnimg.cn/20201012105040126.png#pic_center) 关联关系 是类与类、类与接口之间的强依赖关系,这个依赖关系是长期的,平等的,可以单向、双向。原创 2020-10-12 10:53:02 · 312 阅读 · 0 评论 -
架构师修养8
包装简历中心思想:: 项目经验,技术栈 ,专业性如何体现专业性, 技术名词,一堆汉字的简历过不了,多用技术名词围绕专业性去写扬长避短,误区,虚实结合期望薪资 谈薪资求职意向 。net架构师 / 高级开发工程师 两个简历专业,分门别类,无废话工作经验项目经验 占篇幅50%以上少汉字,多名词项目经验挑重点写,3-4个,多了没意义不拖泥带水,该有的都有面试接到招聘电话 要热情答应去面试,又没有去面试前准备,查看面试公司的主营业务,企查查查看面试公司正规性原创 2020-10-11 21:48:37 · 133 阅读 · 1 评论 -
架构师修养7.2
项目方面+ 如何分析需求? * 谁提出的需求 * 提出的这个需求有哪些要求+ 业务、技术、架构的关系 * 业务是一个目标, * 为了完成这个目标使用很多技术,技术是实现 * 架构是为了适应业务的变化,将更多的业务目标整合进来,实现共同的业务目标 回答概念性问题,先抽象(讲概念),后具体(举例子),总结+. 如何理解架构师 * 实现业务的增长,设计可根据业务扩展的松散框架 * 具备调动资源的权利 * 微服务和微服务架构的关系 微服务是业务拆分, 微服务架构是对微服原创 2020-10-11 21:21:16 · 49 阅读 · 0 评论 -
架构师修养7.1
抽象思维、目标思维什么是抽象从事物中抽取共同的部分(属性)表面描述每个共同的部分 代表事物的个性,原理性抽象事物分看得见的事物和看不见的事物抽取事物内部的属性就是抽象思维抽象就是抽象事物的属性和方法抽象的过程就是透过现象(变化)看本质(不变)抽象就是一个分类过程根据事物的属性分类如何抽象感性认识,看得到的一切,基本描述分两类,对事物本身的外在描述,对事物之间的关系描述分析分开剖析,把事物拆分成零部件分析,程序本身是一个树,每个节点 是一个组件,每个组件可替换说明架构扩展性原创 2020-10-11 18:24:03 · 80 阅读 · 0 评论 -
架构师的修养 6
观察者模式观察对象的一举一动,根据对象的状态做出反应中介者模式协调多个对象之间的关系,解决循环依赖,强依赖,场景聊天室群聊观察者只有一个发起者,中介者是都可以是发起者单例模式事件总线 ,协调事件源和事件处理器优点 解耦、扩展性、重用性...原创 2020-10-11 16:26:11 · 45 阅读 · 0 评论 -
架构师修养5
先引入对象之间的关系,再引入场景,再引入代码外观模式微服务架构里的 聚合微服务 应用了外观模式,屏蔽了聚合服务于子服务直接的关系缺点: 违背单单一职责,扩展困难外观模式可以调用多个对象,代理模式可以屏蔽单个对象抽象了什么优点是什么缺点是什么适配器模式适配相同的接口,适配器模式是适配相同的接口,但是实现可能不同,代理模式完全替换原始对象尽量用组合模式,不去继承,继承扩展性较低应用场景,已经部署的项目,无法解决新需求,但是被实现了。让多个无任何关系的类一起工作模板方法模式场景不同原创 2020-10-11 14:39:56 · 48 阅读 · 0 评论 -
架构师修养4
行为型设计模式,主要在于客户端交互, 设计模式都是为了提高系统的扩展性和稳定性责任链模式场景: 工作流, 请假流程请假1天找组长,2天找主管,3天找经理根据时间点打招呼,早上8点 上午好,下午3点,下午好,下午12点,晚上好组件职责链,抽象职责类抽象自关联,应用于流程管理,**.net core 管道 **迭代器模式foreach ,set, dictornary不允许修改集合,暴露少一些属性,只允许遍历主要是遍历,保证集合安全。空对象模式不修改客户端调用代码,只增加空 的情况,多原创 2020-10-11 13:41:27 · 52 阅读 · 0 评论 -
架构师修养3
建造者模式创建型设计模式创建复杂的对象,通过建造者类负责对象的构建,对象的每个属性单独构建场景造一辆自行车,造轮胎,车架,座椅,不同的厂商造车流程不同,顺序不同,构造不同装饰模式结构型设计模式不直接修改对象,增加包装对象以增加功能,比如装修公司 装修毛坯房,不改变房子原有结构,只新增一部分功能没新增一个功能,增加一个装饰器,不改变原有功能可以层层包装,多个装饰类场景支付成功后的回调处理,发送短信、发送邮件、发送支付成功代理模式场景客户端访问服务器端图片, 服务器多生成代理原创 2020-10-11 12:05:02 · 56 阅读 · 0 评论 -
架构师的修养2
原型模式浅拷贝只拷贝值类型深拷贝通过二进制序列化和反序列化 进行所有属性的拷贝组合模式对象的自关联,树 的样式过滤器模式通过不同的过滤条件的对象集合的操作原创 2020-10-11 11:14:31 · 41 阅读 · 0 评论 -
架构师的修养1
场景1设计一个可以创建不同几何图形(Shape),如Circle,Rectangle,Triangle等绘图工具类,每个几何图形均具有绘制Draw()和擦除Erase()两个方法要求在绘制不支持的几何图形时,抛出一个UnsuppShapeException异常,可应用简单工厂模式, 因为实现相同的接口Shape。简单工厂的优点:1.不需要关心类的创建细节。2.减轻类之间的耦合依赖,具体类的实现只是依赖于简单工厂,而不依赖其他类。简单工厂的缺点:1.扩展复杂,当简单工厂需要生产出另外原创 2020-10-10 10:00:45 · 108 阅读 · 0 评论 -
Sqlite code first 和多数据源
这里支持仅定义数据库模型类,生成sqlite数据库文件也支持同一个数据库上下文 生成多个sqlite数据库文件基于.net 4.0版本支持32位和64位调用for (int i = 0; i < 10; i++) { var dbFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Test{i + 100}.db"); ...原创 2020-09-26 11:37:00 · 152 阅读 · 0 评论 -
c# xml配置文件读取
可读取默认xml配置,没有则创建默认配置调用方式:::仅需要指定配置文件路径和默认配置参数public class Program { const string SystemConfigFile = "sys.cfg"; static SystemConfigRead m_SystemConfigRead = new SystemConfigRead(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ...原创 2020-09-26 10:52:33 · 154 阅读 · 0 评论 -
c# 即时消费队列,批量超时处理
即时处理超时 或者达到指定数量处理调用:static void Main(string[] args) { PatchDataToDB put = new PatchDataToDB(); put.Start(); Task.Factory.StartNew(() => { Random rdm = new Random(); ...原创 2020-09-26 10:30:09 · 371 阅读 · 0 评论 -
c# 二进制文件读取助手
可以快速读写二进制文件调用示例如下static void Main(string[] args) { string targetFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test.b2f"); using (var writer = new IdxInfoWriter(targetFile)) { ...原创 2020-09-26 10:15:52 · 155 阅读 · 0 评论 -
应用程序配置文件Appsetting 助手
public static class AppSettingHelper { /// <summary> /// 从AppSetting中获取配置数据 /// </summary> /// <typeparam name="T">获取的配置数据类型</typeparam> /// <param name="key">配置KEY名</param>...原创 2020-09-26 09:55:08 · 564 阅读 · 0 评论