Web Analytics
yangyang

a .NET Developer

DotNet Framework


Python注册和调用C#中的事件和方法

我有个用C#编写的程序,需要提供其中的一部分功能给使用Python的同事使用,于是研究了一下如何在Python中调用C#的方法,特别是如何注册C#中的回调,这里记录一下。 使用Python for Net类库 使用Pythonnet类库可以在Python中调用C#编写的dll,要使用pythonnet首先要安装,安装方法很简单,在管理员权限下使用命令行程序即可安装: pip install pythonnet 安装完成之后,使用pip list查看一下 …

Delegate Python pythonnet callback pythonnet debug

编译器对代码的重排序对程序可能产生的影响

编译器在编译代码或者CPU在执行代码的时候,为了提高编译器和处理器的执行性能,编译器和处理器会对指令重排(reorder)序。 编译器优化的重排序是在编译时期完成的,指令重排序和内存重排序是在CPU运行时进行的。通常情况下,重排序不会产生什么问题,但在涉及到多线程时,可能会遇到问题。本文列举了两个例子来说明编译器重排序,可能对程序造成错误。第一个例子是经典的双检锁,编译器对代码的重排序可能会多线程模式下的代码产生意向不到的错误,这个时候就需要同步锁来强制代码按照我们要求的方式来生成。第二个例子是在使用智能指针管理资源对象时可能产生的资源泄露,编译器的重排序,可能会使得原始对象创建后,和把对象放到智能指针之间会被插入其它的操作,如果这些操作抛出了异常,那么创建出来的原始对象的指针就会丢失,从而产生资源泄露。所以在编写多线程代码以及在对原始资源进行管理的时候,要注意以上问题。 …

Singleton volatile reorder double-check locking lazy initialization

位运算及其应用

位运算符作用于整型对象,并把运算对象看作是二进制位的集合。位运算提供了检查和设置二进制位的功能。通常在编写代码中,相比加减乘除,位运算并不常用,但在有些情况下,位运算有用处。本文首先介绍为位运算的基本概念,然后介绍位运算的应用场景,包括使用Bitmap来存储整型数据,并介绍了在此基础上如何对大量不重复的整型数据进行快速排序,对大量整型数进行去重和快速查找,最后介绍了编程语言对Bitmap思想的实现,包括C++里面的bitset,C#里面的BitArray,并介绍了枚举值中使用位运算的一些例子。 …

bitwise or xor bitmap bitset bitarray

当心文件路径中的Unicode控制字符

最近遇到一个特别诡异的问题,文件明明存在,但是在使用File.Exists判断时却显示为false,经过一番996,发现在获取文件绝对路径的时候,从文件的“属性”-"安全"Tab页里面,复制“对象名称”时,必须从“左往右”选中复制,如果从“右往左”选中复制,则会包含一个不可见的Unicode "u202A"字符(unicode十进制8234),从而导致错误。 …

LRO RLO 0x202A 0x202E

C#中实例方法与虚方法的调用性能比较

实例方法、静态方法这类在编译时就能确定调用对象的方法相比抽象方法、虚方法、接口方法这类动态方法在函数调用方面速度要快一些,但这个耗时差别,与本身函数内部逻辑运行的耗时相比,在绝大多数情况下可以忽略不计。所以我们在写代码时,不用纠结使用虚方法、抽象方法或接口方法在方法调用时的开销,反而需要优先考虑的是代码的扩展性、灵活性,更进一步要关注函数方法内部算法逻辑或者流程的优化。 …

virtual method

.NET中的一些无损压缩算法

股票的行情这种时序数据类型,数据冗余度和相似度较高,天然适合进行压缩。本文分析了几种无损压缩算法,分别是C#内置的和SharpZipLib的GZip、Zstd、LZ4以及Snappy。在对比这几种算法的压缩率,压缩时间后发现,Zstd具有比较好的压缩率和压缩速度,基本能满足行情数据处理以及传输效率的要求。 …

GZip SharpZipLib Zstd LZ4 Snappy lossless compression algorithm

使用LINQPad实现短平快的功能需求

在平常的开发过程中,我们可能需要写一小段代码来分析某个数据,或者验证某个功能是否实现正确。通常要实现这些小功能,可以在Visual Studio中完成,但从Visual Studio打开启动完成,到开始编写第一行代码,通常需要很多时间 ,LINQPad提供了一种即开即写即编译运行的C#环境,可以用来进行快速的概念验证,以及开发一些短平快的小功能或者需求,非常方便。 …

LINQPad

给站点图片添加CDN功能以提升访问速度

本博客是基于开源Moonglade系统搭建的,由于贫穷,只购买了一台资源极其有限的云服务器。当文章图片过多时,由于带宽和性能的原因,导致文章加载完成耗时很长,本文提供了将站点图片上传到又拍云并启用CDN功能,然后在Moonglade里设置图片CDN从而极大提升了文章加载的响应速度的一种方法,使得在有限的服务器资源下,可以比较随心所欲的在文章里添加图片。 …

CDN Moonglade UpYun

在WPF中使用ttf字体图标

在Winform时代图标,图标都是在资源文件下创建JPG或者PNG来作为图片实现,但是随着TTF字体图标的普及,图标类型的图片越来越多的被放入到TTF中。 比如fontawesome 、iconfont 等,本文以iconfont为例聊一聊在WPF下如何使用TTF字体作为图标。 …

WPF ico file ttf

为Excel插件增加OCR识别功能

在前面开发一个社区团购微信接龙报表自动生成的Excel插件这篇文章中,介绍了如何开发一个根据买菜供货菜单结合群接龙自动生成统计报表的Excel插件。在那篇文章里,是手动输入购物清单里的商品和价格的,其主要原因是上头给的就是图片,而不是Excel文件。 本文介绍了在.NET程序中如何使用OpenCVSharp4结合PaddleOCR来实现图片里文字和表格的识别,并以WPF和Excel插件的方式将OCR功能引入到程序中,极大的减轻了手动录入的工作量。 …

Excel Development VSTO OCR PaddleOCR PaddleSharp OpenCVSharp4