C#
文章平均质量分 65
@David Liu
别在树下徘徊,别在雨中沉思,别在黑暗中落泪。
展开
-
C#调用innosetup实现自动打包
Inno Setup 是一个免费的 Windows 安装程序制作软件。第一次发表是在 1997 年,Inno Setup 今天在功能设置和稳定性上的竞争力可能已经超过一些商业的安装程序制作软件。原创 2022-11-05 20:38:09 · 927 阅读 · 0 评论 -
C#中的结构体与类的区别
首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字class 定义结构使用关键字struct.在语法上其实类和结构有着很多相似的地方. 定义类的语法 class Person{ private string name; private int age; public void SayHi() { Console.WriteLine("Hello,My Name is "+this.name+",My Age is "+this.age)...转载 2021-12-10 20:56:03 · 218 阅读 · 0 评论 -
C#中Property和Attribute的区别
Attribute 字段Property 属性(get;set;)属性的正常写:private string name;public string Name {get { return name; }set { name = value; }}简写:(自动属性)public string Name { get; set; }然后 编译器 会转换成 正常写法l Property就是访问字段(成员变量,Field)提供的一种方式(set/get)l Prope..转载 2021-12-01 22:27:49 · 1140 阅读 · 0 评论 -
C#中的GC垃圾收集器工作原理
GC一个跟踪过程,它传递性地跟踪指向当前使用的对象的所有指针,以便找到可以引用的所有对象,然后重新使用在此跟踪过程中未找到的任何堆内存。公共语言运行库垃圾回收器还压缩使用中的内存,以缩小堆所需要的工作空间。垃圾收集器的基本算法很简单:●将所有的托管内存标记为垃圾●寻找正被使用的内存块,并将他们标记为有效●释放所有没有被使用的内存块●整理堆以减少碎片...原创 2021-12-01 22:19:19 · 309 阅读 · 0 评论 -
接口与抽象类的区别
a、抽象类不能被实例化只能被继承;b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类;e、抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。接口:Java中接口使用interface关键字修饰,特点为:a、接口可以包含变量、方法;变量被隐士指定为public st.原创 2021-12-01 21:27:03 · 37997 阅读 · 3 评论 -
析构函数和Dispose的使用区别
MSDN也有非常详细的说明但看起来不是很系统。也曾经做过分析,但没有总结下来又忘了,这次整理一下MSDN和网上搜集的一些资料,以备不时只需。MSDN建议 // Design pattern for a base class. public class Base : IDisposable { //保证重复释放资源时系统异常 private bool _isDisposed = false; // 析构函数,编译器自动生成Fina转载 2021-12-01 21:18:33 · 683 阅读 · 0 评论 -
c#快速导出csv或excel
private void btn_Export_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = DateTime.Now.ToString("yyyy-MM-dd"); sfd.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx|(*.c...原创 2021-06-29 22:03:22 · 828 阅读 · 0 评论 -
VS2015使用Costura.Fody将dll打包到exe
一、Costura.Fody是什么?Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里。二、使用步骤1.安装Fody步奏如下:可以在VS的程序包管理器控制台中输入Install-Package Fody -Version 4.2.1来安装4.2.1版本的Fody2.安装Costura.Fody步奏如下:在VS的程序包管理器控制台中输入Install-Package Co原创 2021-05-24 22:04:49 · 2456 阅读 · 0 评论 -
C#引用com组件Microsoft.Office.Interop.Excel.dll读取EXCEL文件
首先是Excel.dll的获取,将Office安装目录下的Excel.exe文件Copy到DotNet的bin目录下,cmd到该目录下,运行TlbImpEXCEL.EXEExcel.dll得到Dll文件。再在项目中添加引用该dll文件./读取EXCEL的方法 (用范围区域读取数据)private void OpenExcel(string strFileName){ object missing = System.Reflection.Missing.Value; ...转载 2021-05-04 22:36:34 · 2721 阅读 · 0 评论 -
C#中那些“举手之劳”的性能优化
曾经在网上听过这样一句话,程序的可读性和性能是成反比的。我非常赞同这句话,所以对于那些极度影响阅读的性能优化我就不在这里赘述了,今天主要说的就是一些举手之劳即可完成的性能优化。减少重复代码这是最基本的优化方案,尽可能减少那些重复做的事,让他们只做一次,比较常见是这种代码,同样的Math.Cos(angle) 和Math.Sin(angle)都做了2次。privatePointRotatePt(doubleangle,Pointpt) { PointpRet=...转载 2021-04-28 23:14:06 · 369 阅读 · 0 评论 -
Winform性能优化
1、使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2、强制垃圾回收3、多dispose,close4、用timer,每几秒钟调用:SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1);具体见附录。5、发布的时候选择Release6、注意代码编写时少产生垃圾,比如String + String就会产生大量的垃圾,可以用StringBuffer.Append7、this.Disp转载 2021-04-28 22:57:37 · 1779 阅读 · 0 评论 -
C#性能优化
1. C#语言方面1.1 垃圾回收垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意。1.1.1 避免不必要的对象创建由于垃圾回收的代价较高,所以C#程序开发要遵循的一个基本原则就是避免不必要的对象创建。以下列举一些常见的情形。1.1.1.1 避免循环创建对象 ★如果对象并不会随每次循环而改变状态,那么在循环中反复创建对象将带来性能损耗。高效的做法是将对象提到循环外面创建。1.1.1.2 在需要逻辑分支中创建对象如果对象只在某些逻辑分...转载 2021-04-28 22:54:16 · 1045 阅读 · 0 评论 -
C#线程池使用全网知识点汇总
在C#编程语言中,使用线程池可以并行地处理工作,当强制线程和更新进度条时,会使用内建架构的ThreadPool类,为批处理使用多核结构。在什么情况下使用线程池? 1.单个任务处理的时间比较短 2.需要处理的任务的数量大线程池(ThreadPool)使用起来很简单,但它有一些限制:1. 线程池中所有线程都是后台线程,如果进程的所有前台线程都结束了,所有的后台线程就会停止。不能把入池的线程改为前台线 程。2. 不能给入池的线程设置优先级或名称。3. 对于COM对象...原创 2021-04-21 22:11:02 · 417 阅读 · 0 评论 -
C#使用$语法糖
在C#6.0 (VS 2015)支持出现的一个新特性,也就是一个小语法糖,其作用相当于对String.format()的简化。用$符号来格式化字符串,可以大大提高代码的可读性,简洁度。用法非常简单$后写两个双引号 “” ,变量用{} 包围.比较Interesting 的是 : 新的格式化还支持任何表达式的直接赋值c#6.0为了改善string.Format使用的不方便才有了 $格式化。C#中$的用法:是为了替代string.format();原先赋值需要占位符和变量,当需要拼接多个.原创 2021-04-21 21:30:45 · 1189 阅读 · 0 评论 -
C#如何安全地从后台更新UI
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后从后台线程更新按钮上的文本为“关闭”,初学者往往会想当然地这么写: void UpdateText() { button.Text="关闭"; }这样的写法运行程序之后,可能会触发异常,异常信息大致是“不能从不是创建该控件的线程调用它”。注意这里是“可能”,并不一定会触发该种异常。造成这种异常的原因...原创 2020-11-29 19:43:15 · 1176 阅读 · 0 评论 -
C#代码如何有效防止反编译破解
1.在编码过程中尽量使用private/internal关键词修饰class、方法和字段名称2.编码过程尽可能少地使用public修饰class、方法和字段名称3.避免使用反射和序列化,反序列化操作4.添加生成事件,调用Dotfuscator 进行代码混淆if $(ConfigurationName)==Debug "C:/Program Files (x86)/Microsoft Visual Studio 14.0/PreEmptive Solutions/Dotfuscator a原创 2020-06-17 16:22:53 · 16606 阅读 · 0 评论 -
C#使用RSA私钥文件签名文件和验证签名,附源码
说明:使用的私钥格式必须为RSA Key格式,如果为PKCS8 Key格式可以使用以下网址进行转换https://www.chinassl.net/ssltools/convert-key.html生成签名: SafeUtil su = new SafeUtil(); string privateKeyPath = Applicatio...原创 2020-04-30 03:16:37 · 4634 阅读 · 2 评论 -
C# 调用halcon进行图像匹配算分
//// File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0//using HalconDotNet;namespace VsHelper{ void Match() { HTuple Width, Height, WindowHandle3,...原创 2019-12-11 23:42:47 · 2403 阅读 · 0 评论 -
C#调用远程桌面,自动输入IP用户和密码
[Window Title]远程桌面连接用法[Content]MSTSC [<connection file>] [/v:<server[:port]>] [/g:<gateway>] [/admin] [/f[ullscreen]] [/w:<width> /h:<height>] [/public] | [/span] [/m...原创 2019-12-11 16:47:48 · 2881 阅读 · 2 评论 -
RC4加密算法原理与C#实现
RC4算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048比特), 在如今技术支持的前提下,当密钥长度为128比特时,用暴力法搜索密钥已经不太可行,所以可以预见 RC4的密钥范围任然可以在今后相当长的时间里抵御暴力搜索密钥的攻击。实际上,如今也没有找到对 于128bit密钥长度的RC4加密算法的有效攻击方法。 ...原创 2019-12-05 22:16:29 · 1812 阅读 · 0 评论 -
C# Ssh连接实现
using System;using System.IO;using System.Text;using System.Windows.Forms;using Tamir.SharpSsh;namespace TcpClientDemo{ public class SshConnectionInfo { public DataGridViewRow...原创 2019-12-05 20:32:06 · 7309 阅读 · 6 评论 -
C#实现所有CRC8,CRC16,CRC32校验算法
说明:CRC8与串口大傻计算结果不一致CRC16与串口大傻计算结果一致CRC32与串口大傻计算结果一致,但4.5版本大傻计算结果最高字节始终为0同时对16进制字符串11 22 33 进行校验计算结果如下本算法结果如下:using System;using System.Collections.Generic;using System.Text;names...原创 2019-12-01 15:50:23 · 5081 阅读 · 0 评论 -
C#实现QQ2019自动登录
调用方式: private void btn_AutoLoginQQ_Click(object sender, EventArgs e) { VsHelper.QQ2019AutoLogin.AutoLoginQQ.AutoLogin("账号", "密码"); }实现原理打开QQ找到QQ窗口句柄鼠标选中账...原创 2019-11-30 23:34:09 · 987 阅读 · 0 评论 -
DButil调用
#region DButil public static DBUtil.IDbAccess Db = null;// DBUtil.IDBFactory.CreateIDB(@"Data Source=" + Environment.CurrentDirectory + "\\DB\\Data.db;Password=...;", "SQLITE"); ...原创 2019-11-27 20:29:19 · 350 阅读 · 0 评论 -
ICSharpCode.TextEditor添加ini和python支持
INI-Mode.xshd<?xml version="1.0"?><SyntaxDefinition name = "INI" extensions = ".asp;.aspx;.asax;.asmx" extends = "HTML"> <RuleSets> <RuleSet ignorecase = "true"> ...原创 2019-04-27 16:33:39 · 809 阅读 · 0 评论 -
多线程同步与线程池
前台线程和后台线程C#中的线程分为前台线程和后台线程,线程创建时不做设置默认是前台线程。即线程属性IsBackground=false。Thread.IsBackground = false;//false:设置为前台线程,系统默认为前台线程。区别以及如何使用:这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运...原创 2019-05-12 23:42:20 · 454 阅读 · 0 评论 -
C# DataGridView使用特殊情况处理
DataGridView CellFormatting单元格格式化private void Form1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("Id")); ...原创 2019-05-10 22:24:23 · 998 阅读 · 0 评论 -
C#构造函数与析构函数
一、C#析构函数1. 析构函数的定义与注意的问题析构函数用于释放被占用的系统资源。析构函数的名字由符号“~”加类名组成。使用析构函数时,应该注意下面的问题:?只能在类中使用析构函数,不能在结构中使用析构函数。?一个类只能有一个析构函数。?不能继承或重载析构函数。?析构函数只能被自动调用。?析构函数没有任何修饰符、没有任何参数、也不返回任何值。2. 调用析构函...转载 2019-04-14 11:41:23 · 433 阅读 · 0 评论