上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 21 下一页
摘要: 1,异步编程 异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。 如果使用回调或事件来实现(容易callback hell),不仅编写这样的代码不直观,很快就容易把代码搞得一团糟。不过在.NET 4.5(C# 5)中引入的as 阅读全文
posted @ 2022-02-17 17:42 小林野夫 阅读(160) 评论(0) 推荐(1)
摘要: 使用条件 1、必须熟练掌握锁、死锁、task的知识,他是建立这两个的基础上的。task建立在线程和线程池上的。 2、并不是所有代码都适合并行化。 例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 3、 Parallel.For()和Pa 阅读全文
posted @ 2022-02-17 16:55 小林野夫 阅读(145) 评论(0) 推荐(0)
摘要: 前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel。 Channel在% dotnet add package System.Threading.Channels 而在Core 3.0 preview 7开始,就直接包含在框架中了。 是一个相对较新的特性。从Core 2. 阅读全文
posted @ 2022-02-17 02:10 小林野夫 阅读(2321) 评论(1) 推荐(2)
摘要: 概要 1、如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本。这是因为您需要使用 AsTask 方法将 ValueTask<T> 转换为 Task<T>这将产生一个分配,如果首先使用了缓存的 阅读全文
posted @ 2022-02-17 01:55 小林野夫 阅读(1211) 评论(0) 推荐(1)
摘要: [MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展) 阅读全文
posted @ 2022-02-16 14:08 小林野夫 阅读(4550) 评论(0) 推荐(1)
摘要: 5,MethodImpl 特性 此特性在 System.Runtime.CompilerServices 命名空间中,指定如何实现方法的详细信息。 内联函数使用方法可参考 https://www.whuanle.cn/archives/995 作用域:MethodImpl 特性可以影响 JIT 编译 阅读全文
posted @ 2022-02-16 13:42 小林野夫 阅读(3475) 评论(0) 推荐(2)
摘要: 函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程是要耗费时间的。 C# 函数执行 return 语句返回时,需要从栈中回收形参和局部 阅读全文
posted @ 2022-02-16 13:26 小林野夫 阅读(176) 评论(0) 推荐(0)
摘要: 首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆。CTR:设置引用类型,值类型。GC:只负责回收托管对象,不负责回收非托管对象。垃圾回收器的基本假定: 1.被分配内 阅读全文
posted @ 2022-02-16 13:17 小林野夫 阅读(708) 评论(0) 推荐(0)
摘要: 原文:https://python.iitter.com/other/47604.html 前言 在上篇文章浅谈C#取消令牌CancellationTokenSource[1]一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回调 阅读全文
posted @ 2022-02-15 15:55 小林野夫 阅读(370) 评论(0) 推荐(0)
摘要: 原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了async/await语法糖。自那 阅读全文
posted @ 2022-02-12 19:29 小林野夫 阅读(1506) 评论(0) 推荐(1)
摘要: 原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题。能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值。这种概念很难融入现有的语言。awaitTask<T> 底线是不允许构造函数,因此让我们探索一些替代方 阅读全文
posted @ 2022-02-12 17:55 小林野夫 阅读(470) 评论(0) 推荐(0)
摘要: 在我们深入研究"异步OOP"之前,让我们解决一个相当常见的问题:如何处理异步方法的继承?那么"异步接口"呢? 幸运的是,它确实可以很好地与继承(和接口)一起使用。请记住,这是一个实现细节,因此无法使用 定义接口。要在接口中定义异步方法,只需定义具有相同签名的方法,减去关键字:async 如下: in 阅读全文
posted @ 2022-02-12 17:24 小林野夫 阅读(178) 评论(0) 推荐(0)
摘要: [MethodImpl(MethodImplOptions.Synchronized)]与lock机制 在进行.NET开发时,经常会遇见如何保持线程同步的情况。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerSe 阅读全文
posted @ 2022-02-11 18:12 小林野夫 阅读(314) 评论(0) 推荐(0)
摘要: 在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息。所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解决程序中出现的问题,这种调试也被称为是非中断调试。输出调试信息的类保存在 System.Diagno 阅读全文
posted @ 2022-02-11 16:57 小林野夫 阅读(1781) 评论(0) 推荐(0)
摘要: 概览 在学task类之前必须学习线程的知识。 以下是task命名空间的类的结构图 1、2种任务类型: 有返回值task<TResult> 、无返回值task。 2、2座任务工厂 TaskFactory/TaskFactory<TResult> 3、2种TaskCompletionSource/Tas 阅读全文
posted @ 2022-02-09 16:32 小林野夫 阅读(1042) 评论(0) 推荐(0)
摘要: TaskCompletionSource具体功能 用于封装一个没有不带委托的任务实列。可以在其他线程控制该任务实列什么时候结束、取消、错误。类似于EventWaitHandle的功能。 属性 Task 方法 SetCanceled:将TaskCompletionSource.Task 转换为Canc 阅读全文
posted @ 2022-02-09 11:19 小林野夫 阅读(7970) 评论(0) 推荐(3)
摘要: TaskContinuationOptions 根据 TaskContinuationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局队列 不包含 PreferFairness时 阅读全文
posted @ 2022-02-06 13:11 小林野夫 阅读(1214) 评论(0) 推荐(2)
摘要: [No0000152]C#基础之IL,轻松读懂IL 先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用。到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西。其实IL本身逻辑很清楚,主要是把指令的意思搞明白就好办了。记指令只要 阅读全文
posted @ 2022-02-06 10:29 小林野夫 阅读(1965) 评论(0) 推荐(0)
摘要: 转载自:https://www.cnblogs.com/zkweb/p/7687737.html 很多C#的初学者都会有这么一个疑问, .Net程序代码是如何被机器加载执行的? 最简单的解答是, C#会通过编译器(CodeDom, Roslyn)编译成IL代码, 然后CLR(.Net Framewo 阅读全文
posted @ 2022-02-06 10:17 小林野夫 阅读(162) 评论(0) 推荐(0)
摘要: 背景 由于枚举器存在遍历二叉树不方便的问题。才有了迭代器。在了解了迭代器之前必须了解枚举器。 迭代器就是带了状态机的枚举器。 基本介绍 1)迭代器模式( lterator Pattern)是常用的设计模式,属于行为型模式2)如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还 阅读全文
posted @ 2022-01-30 17:12 小林野夫 阅读(1120) 评论(0) 推荐(1)
摘要: 总结: 1、枚举器就像是序列中的“游标”或“书签”。可以有多个“书签”,移动其中任何一个都可以枚举集合,与其他枚举器互不影响。用来遍历数据结构(单项表链、数组、集合类成员等)。 2、可以使用foreach 遍历枚举器。foreach 用来遍历鸭子类型.点击查看foreach详细用法 什么是枚举器 实 阅读全文
posted @ 2022-01-30 14:43 小林野夫 阅读(3993) 评论(0) 推荐(1)
摘要: 背景..什么是继承? 「继承」是对象导向编程的其中一个基本属性。 它可让您定义子类,重复使用(继承)、扩充或修改父类别行为。 其成员可供继承的类别称为基底类别。 继承基底类别成员的类别则称为「衍生类别」。 C# 和 .NET 只支持「单一继承」。 也就是说,类别只能继承自单一类别。 不过,继承可以转 阅读全文
posted @ 2022-01-30 07:29 小林野夫 阅读(125) 评论(0) 推荐(0)
摘要: CoreCLR是微软新出的跨平台公共语言运行时,和之前的CLR不同的是前者砍掉了大部分不常用功能,优化了代码,而且不依赖于类似于iis这样的软件,是由线程来进行维护的,程序集领域也是由线程来管理,在吞吐量和运行效率上来说都大大提升。 不过你们也不要担心之前学的CLR会不会没用,白学了,做了无用功,这 阅读全文
posted @ 2022-01-29 23:17 小林野夫 阅读(718) 评论(0) 推荐(0)
摘要: as(OpCodes.Castclass)功能:测试对象引用(O 类型)是否为特定类的实例。相当于:expression is type ? (type)expression : (type)null 做类型检测判断,如果类型兼容则转换,否则返回null只是as 只被计算一次。 使用规则: 1、as 阅读全文
posted @ 2022-01-29 23:05 小林野夫 阅读(288) 评论(0) 推荐(0)
摘要: "面向对象设计五大原则"和良性依赖原则在应付变化方面的作用。 SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转) 单一职责原则(Single-Resposibility Principle)。"对一个类而言,应该仅有一个引起它变化的原因。"本原则是我们非常熟悉地"高内聚性原则"的引申, 阅读全文
posted @ 2022-01-29 06:54 小林野夫 阅读(133) 评论(0) 推荐(0)
摘要: 字节码(英语:Bytecode)将虚拟机可以读懂的代码称之为字节码。将源码编译成虚拟机读的懂的代码,需要虚拟机转译后才能成为机器代码的中间代码 叫做字节码。 字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是通过编译器和虚拟机。编译器将源码编译成字节码,特定平台上的虚拟机将 阅读全文
posted @ 2022-01-28 23:48 小林野夫 阅读(710) 评论(0) 推荐(0)
摘要: 编程范型、编程范式paradigm(philosophy)或程式設計法(英語:Programming paradigm),是指软件工程中的一类典型的编程风格。常见的编程范型有:函數式編程、指令式编程、过程式编程、面向对象编程等等。 编程范型提供并决定了程序员对程序执行的看法。例如,在面向对象编程中, 阅读全文
posted @ 2022-01-28 20:16 小林野夫 阅读(294) 评论(0) 推荐(0)
摘要: 重载 同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。 作用: 重载必须发生在一个类中,函数名相同,参数类型或者个数可以不同,返回值类型可以不同。根据参数选择调用方法。重载就是让类以统 阅读全文
posted @ 2022-01-28 14:58 小林野夫 阅读(1944) 评论(0) 推荐(0)
摘要: 今天,我们再来学习 SOLID 中的“L”对应的原则:里式替换原则。 里氏替换原则 里氏替换原则(Liskov Substitution Principle):派生类(子类)对象能够替换其基类(超类)对象被使用。通俗一点的理解就是“子类是父类”,举个例子,“男人是人,人不一定是男人”,当需要一个父类 阅读全文
posted @ 2022-01-28 14:32 小林野夫 阅读(532) 评论(0) 推荐(0)
摘要: 根据 TaskCreationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局队列 不包含 PreferFairness时:preferLocal=ture,进入本地队列 进入全 阅读全文
posted @ 2022-01-27 05:49 小林野夫 阅读(4129) 评论(0) 推荐(1)
摘要: windows消息机制框架原理 结合两张图理解 窗口和窗口类 Windows UI 应用程序 (e) 具有一个主线程 (g)、一个或多个窗口 (a) 和一个或多个子线程 (k) [工作线程或 UI 线程]。 应用程序必须指定窗口类并向 Windows (d) 注册,然后才能创建窗口 (a) 并显示。 阅读全文
posted @ 2022-01-26 15:54 小林野夫 阅读(858) 评论(0) 推荐(0)
摘要: 一、什么是HOOK(钩子) API Windows消息传递机制,当在应用程序进行相关操作,例如点击鼠标、按下键盘,操作窗口等,操作系统能够感知这一事件,接着把此消息放到系统消息队列,然后到应用程序的消息序列中,应用程序通过Getmessage函数取出消息,然后调用DispatchMessage函数将 阅读全文
posted @ 2022-01-26 09:49 小林野夫 阅读(6859) 评论(0) 推荐(0)
摘要: 什么是TaskScheduler? SynchronizationContext是对“调度程序(scheduler)”的通用抽象。个别框架会有自己的抽象调度程序,比如System.Threading.Tasks。当Tasks通过委托的形式进行排队和执行时,会用到System.Threading.Ta 阅读全文
posted @ 2022-01-26 09:21 小林野夫 阅读(9073) 评论(0) 推荐(5)
摘要: 背景 用到的知识点 1、windows消息机制 备注:鼠标点击、键盘等事件产生的消息要放入系统消息队列,然后再分配到应用程序线程消息队列。软件PostMessage的消息直接进入应用程序线程消息队列,不需要经过系统消息队列。软件SendMessage()的消息直接进入 DispatchMessage 阅读全文
posted @ 2022-01-26 00:40 小林野夫 阅读(803) 评论(0) 推荐(0)
摘要: 起因 在看操作系统消息机制的时候,看到一句化:全局消息队列把消息发送到窗口所在的线程消息队列。突然就怀疑起了窗口的意思。于是就有这边基类。 文章来源:https://docs.microsoft.com/zh-cn/windows/win32/learnwin32/what-is-a-window- 阅读全文
posted @ 2022-01-25 22:43 小林野夫 阅读(2577) 评论(1) 推荐(1)
摘要: 句柄是指针的“指针” 指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用A 阅读全文
posted @ 2022-01-25 22:32 小林野夫 阅读(608) 评论(0) 推荐(1)
摘要: 里氏转换 子类可以赋值给父类。(如果有一个地方需要一个父类作为参数,我们可以给一个子类 ) 如果父类中装的是子类对象,那么可以将这个父类强转为子类对象。 创建几个类帮助我们理解: using System; using System.Collections.Generic; using System 阅读全文
posted @ 2022-01-24 17:54 小林野夫 阅读(710) 评论(0) 推荐(1)
摘要: 案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境 vs2022/vscode .net6.0 C#10 开发时长:完全掌握知识点一天就可以完成 、新手估计要2-3周,因为很多知识点 必须 阅读全文
posted @ 2022-01-24 08:25 小林野夫 阅读(748) 评论(0) 推荐(0)
摘要: 这种情况可能发生在当两个线程尝试获取其他资源的锁,而每个线程又陷入无线等待其他资源锁的释放,除非一个用户的进程被终止。线程死锁可能发生在以下的情况:当两个线程相互调用Thread.join();当两个线程使用嵌套的同步块时,一个线程占用了另一个线程的必需的锁,互相等待时被阻塞,就有可能出现死锁。举例 阅读全文
posted @ 2022-01-21 02:30 小林野夫 阅读(3552) 评论(0) 推荐(0)
摘要: 详细情况:https://www.cnblogs.com/wucy/p/15128365.html 背景 为什么引入取消令牌? Thread.abort()方法会破坏同步锁中代码的原子逻辑,破坏锁的作用。以下代码说明了Thread.abort()方是如何破坏锁的 :代码的功能:每个线程进入锁内都会休 阅读全文
posted @ 2022-01-19 11:17 小林野夫 阅读(1714) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 21 下一页
原文链接:https://www.cnblogs.com/cdaniu/