- 博客(446)
- 资源 (7)
- 收藏
- 关注
原创 使用AoT让.NetFramework4.7.2程序调用.Net8编写的库
如图,简单的dll编译后size是1.3M,因为AoT将所有的依赖库都打包到了DLL内,没有C#运行环境也可以执行。可见AoT编译的dll已经和C或C++编译的dll兼容。注意:AoT仅支持win-x64。
2025-02-28 21:38:48
489
原创 DUMP分析时VS企业版和专业版的区别
网上查询vs分析dump文件,查找托管内存泄露,需要使用“调试托管内存”功能,当前安装的vs2022 专用版找不到这个选项,vs2015时ok的,比较版本发行2022是专业版,2015是企业版。可以看到和断点调试时内存快照相同的对象关系视图。
2025-01-24 23:03:26
511
原创 WinDBG查找C++句柄泄露
代码中构造的mutex泄露,查找!htrace -diff输出内容,找到CPPWindowsProject1!使用lsa CPPWindowsProject1!点击WinDBG左上角的Go按钮继续执行,点击UI上的按钮造成泄露;htrace 或!C++代码(频繁点击About按钮导致Mutex句柄泄露)点击WinDBG左上角的Break按钮进入调试模式;windbg的lsa指令:显式指令对应的源码。找到147行的代码位置。
2025-01-24 17:06:54
588
原创 C#的Task
如果给Task.Factory.StartNew函数传递TaskScheduler.FromCurrentSynchronizationContext()参数,则在主线程上执行;注意:Task.Run和async、await两个关键字兼容,内部也是调用Task.Factory.StartNew实现的;Current:使用启用任务的任务的调度方式(如启动任务的任务调度在主线程执行,新的任务也在主线程执行)优先使用Task.Run,除非有定制化需求才用Task.Factory.StartNew。
2025-01-10 16:10:44
319
原创 Orleans异常传递测试
总结:Grain方法抛异常,不会影响服务端,仅在客户端执行线程异常事件处理函数(本例弹出),服务端的线程异常事件处理函数没有执行(但必须有,否则服务端闪退)。首先在客户端、Silo服务程序的Main方法增加ThreadException事件处理函数,避免未处理异常导致进程闪退。
2024-12-21 22:38:12
183
原创 Orleans使用KafkaStream
如上代码,将服务端和客户端配置中的AddMemoryStream替换为AddKafkaStreamProvider,启动zookeeper和kafka服务,启动orleans服务端和客户端,可成功推送消息。服务端项目、客户端项目导入nuget包Orleans.Streams.Kafka(8.0.2)Kafka安装配置见(
2024-12-06 22:43:16
340
原创 Win10安装kafka并用C#调用
zk.bat内容:call bin/windows/zookeeper-server-start.bat config/zookeeper.properties。kfk.cmd内容:call bin/windows/kafka-server-start.bat config/server.properties。kafka_2.13-3.9.0\config\server.properties内修改:log.dirs=D:/Kafka/kafka-logs。双击启动kafka-manager。
2024-12-05 22:17:41
637
原创 Orleans使用ProtoBuf
在服务端配置代码中注释掉NewtonJson引擎注册,改为ProtoBuf注册;即可使用ProtoBuf作为序列化反序列化引擎。本地测试传递大数组,NewtonJson方式反而更快。
2024-11-28 21:41:25
202
原创 Orleans Stream测试
});#region 流的支持#endregion定义一个空Grain接口,和一个实现类,使用ImplicitStreamSubscription注解对流的支持;激活时创建流对象并订阅处理函数。
2024-11-14 21:05:44
248
原创 Orleans集群及Placement设置
服务端界面使用相同的clusterid和serviceid,相同ip地址,不同网关端口号和服务端口号,启动两个silo服务,并使用MySql数据库做Silo间信息同步,实现集群。比如特定业务场景,服务器上部署了硬件外设,希望每个silo服务器都启动一个grain实例,可使用Placement机制进行制约;上面代码做了简单约定,grain user1在端口11111的silo上创建,user2在端口11112的silo上创建。另外Stream会根据StreamID创建额外的Grain,实际应用需注意。
2024-11-10 21:10:23
458
原创 C# Retry库
比如网络访问或硬件参数设置需要重试,可引用gunet上的Polly库。同步方式(每次重试有不同的时间间隔)异步方式(每次重试有不同的时间间隔)
2024-10-27 15:18:26
322
原创 C# async-await循环依赖梳理
3、Task.Run内的委托函数声明为async可以在内部使用await(结合第2条,委托可以接受async函数,也可接受无async的函数)C#的async声明的函数内可以使用await,await的函数又需要async声明的函数,感觉两者互为对方的前提条件,是个死循环。2、winform或wpf控件事件加上async。1、main函数声明前面加上async。
2024-10-26 22:11:21
422
原创 CSharpScript范例
Console.WriteLine("时间: " + date1.ToString("yyyy-MM-dd HH:mm:ss:fff"));Console.WriteLine("时间: " + date1.ToString("yyyy-MM-dd HH:mm:ss:fff"));Console.WriteLine("时间: " + date1.ToString("yyyy-MM-dd HH:mm:ss:fff"));
2024-10-14 22:44:25
447
原创 跨服务器执行PowerShell脚本
Set-NetConnectionProfile -Name "未识别的网络" -NetworkCategory Private。如有多个服务器需要维护,可减少远程桌面操作次数。配置完毕,在本机编写脚本在远程执行。将远程机ip加入信任列表。本机和远程机都要执行。本机和远程机都要执行。
2024-09-13 23:16:19
559
原创 C# Benchmark
注:关注StdDev(标准偏差)即可,越小越好。Mean为平均值,ERROR为标准误差;Ratio为异众比率;右键项目--属性, 勾选优化编译。
2024-06-30 12:02:40
499
原创 C# ObjectPool测试
ObjectPool测试结论:DefaultObjectPool的第二个参数设置合理的缓存大小,应用过程中可以确保无GC,内存稳定;如不启用缓存机制,大量new A对象,频繁GC,内存量跳跃。
2024-06-25 16:39:25
422
原创 openobserve-filebeat配置
上图第一、第三个红框是从openobserver采集-自定义-filebeat中拷贝过来的内容;第二个红框为日志文件所在目录,红框上方的encoding指定日志文件编码方式,否则openserver采集到的日志可能乱码;filebeat启动:打开powershell,输入./filebeat.exe -e -c filebeat.yml。如要启动多个采集实例,需拷贝filebeat目录,修改配置后在启动,否则提示目录被锁定。openobserver内无需配置,推送后会自动创建对应的组织和数据流。
2024-04-21 20:54:30
1000
原创 Rust引用借用 vs 原始指针
原始指针和unsafe块配合,可以避过引用借用保护,但也失去了rust的优势。rust严谨也足够灵活...,除非必要原始指针慎用,用多了又变成c了...
2024-03-28 22:31:41
584
原创 rust引用本地crate
常规方式在Cargo.xml中声明引用的crate,build时去crate.io下载或检查版本,但可能因网络因素导致build失败。首次正常引用三方crate,build时自动下载的crate源码,可将其拷贝到固定目录中做本地引用避免上述问题;注意,这里crate的path是以本项目Cargo.toml文件为基准的相对路径。重新build库,不再去crate.io下载或核对,断网也可以build成功。有时引用一个crate,会间接导入其他crate,需要逐个拷贝。
2024-03-17 21:37:17
1204
原创 rust引用-借用机制扩展
rust自动的引用-借用机制还是有限制的,比如我们要在多次函数调用中修改参数、跨线程传递参数并发修改的场景,单纯使用引用-借用机制就不灵了。这时需要借助rust提供的Rc、Arc、Cell、RefCell对机制来扩展默认的引用借用机制。
2024-03-09 10:08:42
589
原创 rust代码组织
子目录(Crate)中的功能代码按正常方式开发好,在子目录下添加mod.rs文件,用于对外开放子目录下的功能(代码文件名(不带后缀),即模块)。注意:Rust对子目录(Crate)中的内容引用方式,需要按上面代码中注释方式进行,即:目录名称::代码文件名称(无后缀)::struct名称 as 别名。开发过程中需要按功能将代码进行拆分,放不同目录(Crate)中,如下图,将UI子页签分别定义在不同子目录下,在text_editor.rs中引用。注意:目录下有cargo.toml文件的是Package;
2024-02-13 13:58:23
571
原创 tokio tcp通信
客户端、服务端都使用TcpStream的into_split方法获取网络通信读和写实例,进而获取buffer读写对象,通过channel实现线程执行同步。子线程使用tokio::spawn函数启动。
2024-02-11 22:06:27
872
原创 DevExpress-ChartControl
Crosshair - 光标位置显示当前值的定义 可在Serial、ChartControl上定义。LabelsVisible - Serial上指定Point位置是否显示值的标签。Legend - Chart图各Serial的标识说明。Label - 坐标轴格式定义。
2023-08-07 13:47:58
275
原创 C#调用Rust dll测试
C#调用Rust dll,难点在于字符串传递,其他类型比较自然。可以给函数传递json字符串,在传出json字符串,两端通过json序列化、反序列化,可以方便处理参数数据。也可以传递不带字符串的结构体(结构体内含字符串的情况没有验证)没什么难点,直接上码:Rust:use std::thread;use libc::{c_char, uint32_t};use std::ffi::{CStr, CString};use std::str;extern crate serde;exte
2022-01-28 22:36:34
2532
1
原创 win10安装linux子系统
1、控制面板--更新和安全--勾选开发人员选项2、控制面板--应用--程序和功能(滚动到最下端可见)--启用或关闭Windows功能--适用于Linux的Windows子系统3、重启4、打开cmd命令行,输入bash,提示安装linux分发版,复制提示的网址,粘贴到IE浏览器地址栏,回车5、打开windows商店,选择ubuntu,下载、安装6、安装完毕,关掉一直悬浮在上面的等待界面--启动,输入用户名和密码,安装完毕7、安装linux服务8、设置开机自动启动:在目录<C:
2021-03-19 16:21:01
469
原创 带序列超时提示的Observale
Observable.Timeout扩展提供了序列超时的实现,但不够灵活,超时后就异常导致订阅失效。自定义的Observable更加灵活。IDisposable customerTimeoutSubscriber; private void button10_Click(object sender, EventArgs e) { var cnt = 0; var observable = Observable.Creat...
2021-02-05 14:55:49
469
原创 emqttd下载
进入https://www.emqx.cn/mqtt-->文档-->EMQ X Broker-->开始使用-->安装-->找到对应系统的安装路径-->下载对应win10的zip,解压后,进入bin目录,在命令行中执行 ./emqttd start-->在浏览器中键入http://localhost:18083,用户名admin,密码public,进入Dashboard...
2021-01-16 20:13:56
1203
原创 设计模式简化记忆
1、设计7大法则类与接口要单一,(单一原则)依赖接口要最少。(接口隔离)设计面向是接口,(依赖反转)聚合组合少继承。(里氏替换,过多的继承重写,导致里氏替换法则被破坏)扩展不改封装类,(开闭法则,新增功能不能去修改已有实现)核心目标降耦合。(开闭法则是7大法则的核心)预测变化早分离,(设计过程中预测到可能发生的变化,早做规划,将稳定功能和易变功能区别对待)改善系统扩展性。2、uml类图参数返回叫依赖,(做类的成员函数参数和返回值的其他类,构成了依赖关系)成员.
2020-11-06 12:27:11
404
原创 goland服务热重启
开发web api或web项目,修改源码后,无需手动重启即可查看效果,使用air即可实现。安装air:go get -v -u github.com/cosmtrek/air(或下载所有源码后,go build,得到air.exe,拷贝到$gopath/bin目录)在项目目录下,创建.air.config文件,修改[build]中的cmd配置,设置为goland编译程序的命令行命令:cmd = "go build -o ./tmp/beego-demo.exe ./main.go"最终配置
2020-09-28 15:55:15
1431
DataSnap2010白皮书翻译
2010-03-31
ER/Studio中文教程
2009-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人