C#
物随心转
子曰:“学而时习之,不亦说乎?”
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C# 中的Dispose()用法
一. C# Dispose方法的理解是什么呢?类型的Dispose方法应释放它拥有的所有资源。它还应该通过调用其父类型的Dispose方法释放其基类型拥有的所有资源。net的对象使用一般分为三种情况﹕1.创建对象2.使用对象3.释放对象如果是托管堆中申请的对象,垃圾收集器(Garbage Collector)会自动释放对象资源。如果使用非托管(unmanaged)的对象,就要实现IDisposable接口以释放资源。这个类型还必须添加一个作为防御机制的终结器。所有这些程序都把释放资源的工原创 2020-09-01 21:57:38 · 27039 阅读 · 0 评论 -
C# Debug和Trace:输出调试信息
一、介绍在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息。所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解决程序中出现的问题,这种调试也被称为是非中断调试。输出调试信息的类保存在 System.Diagnostics 命名空间中,通常用 Debug 类或 Trace 类实现调试时输出调试信息,具体的语句如下。Debug.WriteLine();Trace.WriteLine();二、实例原创 2020-08-22 19:11:39 · 7621 阅读 · 0 评论 -
Marshal.PtrToStructure与Marshal.StructureToPtr 的使用
一、定义MSDN:将数据从非托管内存块封送到托管对象。重载的方法二、实例1、下面的示例创建一个托管结构,将其传输到非托管内存,然后使用PtrToStructure方法将其传输回托管内存。using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading;using Syst..原创 2020-08-20 19:53:41 · 5911 阅读 · 0 评论 -
ThreadLocal的使用
一。介绍ThreadLocal的官方解释:ThreadLocal 是线程的局部变量,是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段。是一个以ThreadLocal对象为键,任意对象为值得存储结构,这个结构被附带在线程上。也就是说一个线程可以根据一个ThreadLocal对象查询绑定在这个线程上的一个值。ThreadLocal也是线程安全的一种措施,有这么一个经典的比喻——“人手一只笔”。现在有100个人要签名,如果只有一支笔的话,那么肯定要排起原创 2020-08-20 19:27:45 · 279 阅读 · 0 评论 -
C# lock和Interlocked性能测试
一、测试代码using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 测试interlock{ class Program { private static object lo原创 2020-08-16 11:29:26 · 1276 阅读 · 1 评论 -
C#多线程同步实例
功能:两个线程,一个写入数据,一个读出数据未互斥同步using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 测试interlock{ class Program { static void Main(string[] ar转载 2020-08-16 11:13:21 · 395 阅读 · 0 评论 -
Interlocked实现线程的同步与互斥
一、描述MSDN :为多个线程共享的变量提供原子操作。通过System.Threading命名空间的Interlocked类控制计数器,从而实现进程 的同步。Iterlocked类的部分方法如下表:二、原理当线程正在更新可被其他线程访问的变量时,或者当两个线程同时在不同的处理器上执行时。确保 此类的成员不会引发异常。在大多数计算机上,递增变量不是原子操作,需要执行以下步骤: 将实例变量中的值加载到寄存器中。 递增或减小值。 将值存储在实例变量中。 如..原创 2020-08-16 11:04:18 · 710 阅读 · 0 评论 -
关于进程退出的事件
问题:直接停止调试,进程不退出方案:用一个程序监控另一个程序的Process.Exited事件,比如在Main程序中监视Note.exe,即使Note.exe进程被强制结束,note.exe的Exited仍然会运行的。//主程序static void Main(){ //打开记事本 var pro = new Process(); pro.StartInfo.FileName = "notepad"; pro.EnableRaisingEvents = t原创 2020-08-10 19:07:59 · 575 阅读 · 0 评论 -
委托与事件的区别
事件是一种特殊的委托的实例,或者说是受限制的委托,是委托一种特殊应用,在类的外部只能施加+=,-=操作符,二者本质上是一个东西。我们知道委托和事件都可以用来调用跟自己方法签名一样的方法。容易混淆大家的地方大多在于这两者之间的区别。从我们使用委托delegate和事件event上的主要有两大区别(如表1所示)event只允许用add, remove方法来操作,这导致了它不允许在类的外部被直接触发,只能在类的内部适合的时机触发 class ClassC { ..原创 2020-08-01 21:02:10 · 1138 阅读 · 0 评论 -
C#多进程通信的例子
app1using System;using System.Collections.Generic;using System.IO.MemoryMappedFiles;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace 多进程间通信1{ class Program { static void Main(stri原创 2020-06-30 13:35:11 · 950 阅读 · 0 评论 -
C#的字节流Stream
一、原理读写内存-MemoryStream类MemoryStream类用于向内存而不是磁盘读写数据。MemoryStream封装以无符号字节数组形式存储的数据,该数组在创建MemoryStream对象时被初始化,或者该数组可创建为空数组。可在内存中直接访问这些封装的数据。内存流可降低应用程序中对临时缓冲区和临时文件的需要。1、MemoryStream类封装一个字节数组,在构造实例时可以使用一个字节数组作为参数,但是数组的长度无法调整。使用默认无参数构造函数创建实例,可以使用Write方法写入,.原创 2020-06-14 10:56:29 · 2607 阅读 · 0 评论 -
未知的生成错误“因为没有预加载,所以无法解析程序集“System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f1
搜索System.Drawing.dll,添加到工程中原创 2020-06-09 10:49:59 · 3310 阅读 · 0 评论 -
未能加载文件或程序集 或它的某一个依赖项。试图加载格式不正确的程序。问题解决
我使用x64程序,运行时总报错。解决方案:仔细检查项目引用的dll, 有win32的直接移除,换x64的参考:https://blog.youkuaiyun.com/lingxyd_0/article/details/43155039原创 2020-05-28 16:21:45 · 997 阅读 · 0 评论 -
C#多线程之BackgroundWorker
一、BackgroundWorker介绍我们有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应。解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作。新建线程可以用 Thread 类实现多线程同时操作。简单的方法可以通过 BackgroundWorker 类实现。BackgroundWorker是·net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。 常用方法 1.RunWorkerAsync 开始执行原创 2020-05-14 11:42:28 · 1718 阅读 · 0 评论 -
c#信号量Semaphore
进程间通信的方式有很多,常用的方式有:1.共享内存(内存映射文件,共享内存DLL)。2.命名管道和匿名管道。3.发送消息首先要建立一个进程间共享的内存地址,创建好共享内存地址后,一个进程向地址中写入数据,另外的进程从地址中读取数据。本文中进程间的同步采用信号量Semaphore的方式同步思想类似于操作系统中生产者和消费者问题的处理方式。在A进程中创建共享内存,并开启一个线程...转载 2020-05-04 19:40:18 · 774 阅读 · 0 评论 -
C#反射Activator
一、反射的定义与使用场景反射是指程序可以访问、检测和修改它本身状态或行为的一种能力。程序集包含模块,而模块包含类型,类型包含成员。反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射对它们进行访问。使用场景:需要访问程序元数据的特性。 检查和...转载 2020-05-02 20:40:16 · 1462 阅读 · 0 评论 -
c#属性Property,特性类Attribute
Property(属性)对类来说:属性成员描述的是状态信息,对类的实例来说,属性成员的值表示的是该对象的状态值。1、如果类Z是抽象的,包含它的类A 也应该是抽象的。2、重写属性的声明必须与指定与所继承的属性相同的修饰符,类型等3、如果被继承的属性只有单个访问器(读或者写),重写属性也只能单个访问器。如果被继承的属性有两个访问器,重写属性可以只包含一个,也可包含两个4、重写属性可...原创 2017-06-05 14:24:22 · 3569 阅读 · 0 评论 -
c#进程通信——通过内存映射文件
内存映射文件究竟是个什么?内存映射文件允许你保留一块地址空间,然后将该物理存储映射到这块内存空间中进行操作。优势: 1.访问磁盘文件上的数据不需执行I/O操作和缓存操作(当访问文件数据时,作用尤其显著); 2.让运行在同一台机器上的多个进程共享数据(单机多进程间数据通信效率最高);分类: 持久内存映射文件 持久文件是与磁盘上的源文件关联的内存映射文件。在...原创 2020-05-01 22:30:26 · 1034 阅读 · 0 评论 -
c# 进程的创建与撤销
1、创建进程using System;using System.Diagnostics;using System.ComponentModel;namespace MyProcessSample{ class MyProcess { public static void Main() { try ...原创 2020-04-30 14:34:55 · 2682 阅读 · 0 评论 -
AppDomain二——C#中动态加载和卸载DLL
该demo实现动态加载TestDll的功能首先定义一个TestDll库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace TestDll { pub...转载 2020-04-11 14:04:56 · 1436 阅读 · 0 评论 -
AppDomain一——基本原理
一、问题的提出技术一定是为了解决某个应用场景的问题而产生的。很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件。但是在把新的dll替换旧dll的时候,错误发生了。在C++中加载和卸载DLL是一件很容易的事,LoadLibrary和FreeLibrary让你能够轻易的在程序中加载DLL,然后...原创 2020-04-11 11:38:09 · 732 阅读 · 0 评论 -
C# 说说lock
一、MSDN的定义lock 语句获取给定对象的互斥 lock,执行语句块,然后释放 lock。 持有 lock 时,持有 lock 的线程可以再次获取并释放 lock。 阻止任何其他线程获取 lock 并等待释放 lock。lock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。 如果其他线程尝试进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。lock...原创 2020-04-09 13:55:39 · 1064 阅读 · 0 评论 -
C#异步编程await与async
使用 async 修饰符可将方法、lambda 表达式或匿名方法指定为异步。 如果对方法或表达式使用此修饰符,则其称为异步方法 。例子 class Program { static void Main(string[] args) { Console.WriteLine("1.同步ThreaID:" + Thread.C...原创 2020-04-15 11:35:49 · 234 阅读 · 0 评论 -
C#多线程Task的WhenAll用法
多个task调度的实例,需要加锁lockusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleAppTest{ class Program { s...原创 2020-04-09 11:39:21 · 3942 阅读 · 2 评论 -
C#多线程Task的用法
对于多线程,我们经常使用的是Thread。在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于“任务的编程模型”所冲击,因为task会比thread具有更小的性能开销,不过大家肯定会有疑惑,任务和线程到底有什么区别呢?任务和线程的区别:1、任务是架构在线程之上的,也就是说任务最终还是要抛给线程去执行。2、任务跟线程...原创 2020-01-12 21:13:31 · 1109 阅读 · 0 评论 -
C#多线程Parallel的使用
在Parallel下面有三个常用的方法invoke,For和ForEach。1、 Parallel.Invoke这是最简单,最简洁的将串行的代码并行化。在这里先讲一个知识点,就是StopWatch的使用,最近有一些人说找不到StopWatch,StopWatch到底是什么东西,今天就来说明一下。StopWatch在System.Diagnostics命名控件,要使用它就要先引用这...转载 2020-01-12 21:54:31 · 667 阅读 · 0 评论 -
C#使用多线程并发之异步委托
阻塞式编程:我们一边编写的代码都是同步代码,也就是从上到下按照顺序执行。例如public delegate void DoWorkHandler(); class Program { static void Main(string[] args) { Console.WriteLine("开始烧水了"); ...原创 2020-01-06 21:01:47 · 858 阅读 · 0 评论 -
Mutex的使用
什么是Mutex“mutex”是术语“互相排斥(mutually exclusive)”的简写形式,也就是互斥量。互斥量跟临界区中提到的Monitor很相似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。Mutex的用途...转载 2019-07-08 09:54:36 · 3531 阅读 · 0 评论 -
c#线程同步的源语
Windows操作系统在内部使用线程执行块(Thread Execution Block,TEB)这种数据结构来表示一个线程。该数据结构有90多个属性,包括线程标识,最近发生的错误,局部存储等。概念线程同步:>当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作。临界资源:>一次只允许一个线程使用的资源。原子操作:>就是说像原...原创 2019-11-25 13:36:11 · 254 阅读 · 0 评论 -
c#集合的扩展方法——扩展foreach与添加集合
public static class Extentions { /// <summary> /// Executes an Action in every item of a collection /// </summary> /// <typeparam name="T">type ...原创 2020-03-19 14:13:49 · 782 阅读 · 0 评论 -
c#操作符operate的用法
operate+ ,operate-的用法 ,看代码/// </summary> public struct CorePoint { /// <summary> /// Initializes a new instance of CorePoint /// </summary> ...原创 2020-03-18 21:39:02 · 2177 阅读 · 0 评论 -
c#读取csv文件
有如下csv文件,记录城市的信息现在读取该文件,转化为city对象 static DataBase() { var reader = new StreamReader(File.OpenRead(@"cities.csv")); var read = new List<City>(); ...原创 2020-03-18 19:16:50 · 652 阅读 · 0 评论 -
C#操作Excel一
Excel常用的4个名词,workbook,sheet,row,cell导出:将集合中的数据,输出到一个表格中导出的步骤1、创建工作本workbook2、创建工作表sheet3、创建标题行的单元格(设置字体大小、加粗、居中),设置单元格的文本4、创建列头行及单元格,设置单元格文本5、设置工作表中各列的宽度6、遍历数据集,创建数据行集单元格,设置单元格的值7、将工...原创 2020-03-01 18:35:43 · 492 阅读 · 0 评论 -
C#DataTable转List<T>互转
using System;using System.Collections.Generic;using System.Data;using System.Reflection;namespace BT.Preservation.Models{ public static class ExtendMethod { /// <summary> ...转载 2020-03-02 17:08:38 · 398 阅读 · 0 评论 -
关于github下载项目如何提速的一个建议
你们没用过码云吧?码云相当于国内的github,但我用他的唯一目的就是为了下载github项目,在码云上创建一个新项目,并在找到import选项,填入想下载的github项目的地址,导入后即可以国内速度下载,无需翻墙,可达8m每秒...原创 2020-02-23 14:45:49 · 195 阅读 · 0 评论 -
MarshalAs(UnmanagedType.ByValArray, SizeConst = 11)]
MarshalAs:指示如何在托管代码和非托管代码之间封送数据。简单点说,托管代码是一Microsoft的中间语言,它主要的作用是在.NET Farmework的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用,源代码在运行时分为两个阶段:1.源代码编译为托管代码;(所以源代码可以有很多种,如VB,C#,J#)2.托管代码编译为Microsoft系统的.net平台专用文件(如...原创 2020-01-11 17:31:35 · 5986 阅读 · 0 评论 -
C#关键字 abstract,override,virtual的用法
什么是抽象类:abstract关键字修饰的类称为抽象类,抽象类不能被实例化,抽象类是派生类的基类。关键字:abstract语法:public abstract class类名{…………}1、一个抽象类可以同时包含抽象方法和非抽象方法,但不能实例化。2、抽象方法只是在派生类中真正实现,这表明抽象方法只存放函数原型,斌不涉及主体代码,3、派生自抽象类的类需要实现其基类的抽象方法,才...原创 2020-01-09 20:26:58 · 778 阅读 · 0 评论 -
C# webAPI的使用
Web API控制器类似于ASP.NET MVC控制器。它用来处理传入的HTTP请求并将响应发送回调用者,WebAPI控制器是一个类,一个控制器类的名字必须以“Controller”结束,它必须继承自System.Web.Http.ApiController类。控制器的所有公共方法被称为操作方法。它可以在项目的根文件夹中的任何文件夹中创建。但是,按照约定建议在控制器文件夹...原创 2017-06-19 17:52:46 · 4335 阅读 · 0 评论 -
c#复制对象
对于对象克隆的所设计到知识点浅拷贝:是指将对象中的所有字段逐字复杂到一个新对象 对值类型字段只是简单的拷贝一个副本到目标对象,改变目标对象中值类型字段的值不会反映到原始对象中,因为拷贝的是副本 对引用型字段则是指拷贝他的一个引用到目标对象。改变目标对象中引用类型字段的值它将反映到原始对象中,因为拷贝的是指向堆是上的一个地址深拷贝:深拷贝与浅拷贝不同的是对于引...原创 2019-11-19 16:55:06 · 1101 阅读 · 0 评论 -
c#自定义消息事件
//自定义消息 public class CustomEventArgs : EventArgs { public readonly string _msg; public CustomEventArgs(string msg) { this._msg = msg; } }//自定义事件...原创 2019-11-04 16:13:03 · 381 阅读 · 0 评论
分享