02 2022 档案

摘要:总结 1、一般要获取一个内核对象的引用,最好用SafeHandle来引用它,这个类可以帮你管理引用计数,而且用它引用内核对象,代码更健壮 2、托管中生成并引用非托管,一但非托管和托管中的引用断开(托管资源被回收),那么这个时候非托管资源还在,那么释放这个问题就有一丢丢困难。 常见的有两种机制来自动释 阅读全文
posted @ 2022-02-28 21:35 小林野夫 阅读(789) 评论(0) 推荐(0) 编辑
摘要:属性 GC.MaxGeneration:获取系统当前支持的最大代数。 方法 GC.GetTotalMemory(bool forceFullCollection) 方法 true表示该方法先做垃圾收集操作,之后才计算出受控代码分配的字节数。false表示不做垃圾收集,直接计算出受控代码分配的字节数。 阅读全文
posted @ 2022-02-28 21:35 小林野夫 阅读(4575) 评论(0) 推荐(0) 编辑
摘要:这个话题还未做详细研究,暂时用不到,只是粗略看了一下。 使用System.Runtime.InteropServices.GCHandle类来手动控制对象的生命周期 (个人感觉这里可能有一些问题...只是草稿而已..还请高手指正) 1.GCHandle.Alloc 传递一个Object和一个GCHa 阅读全文
posted @ 2022-02-28 21:22 小林野夫 阅读(1085) 评论(0) 推荐(0) 编辑
摘要:在后台垃圾回收 (GC) 中,在进行第 2 代回收的过程中,将会根据需要收集暂时代(第 0 代和第 1 代)。 后台垃圾回收是在一个或多个专用线程上执行的,具体取决于它是后台还是服务器 GC,它只适用于第 2 代回收。 默认启用后台垃圾回收。 可以在 .NET Framework 应用中使用 gcC 阅读全文
posted @ 2022-02-26 17:47 小林野夫 阅读(257) 评论(0) 推荐(0) 编辑
摘要:从 .NET 5 开始,一些新标记为已过时的 API 使用 ObsoleteAttribute 上的两个新属性。 ObsoleteAttribute.DiagnosticId 属性指示编译器使用自定义诊断 ID 产生生成警告。 通过自定义 ID 可专门、单独地取消过时警告。 对于 .NET 5+ 过 阅读全文
posted @ 2022-02-25 16:51 小林野夫 阅读(573) 评论(0) 推荐(0) 编辑
摘要:相关的类 GcSetting 类 GCLargeObjectHeapCompactionMode 枚举 GCLargeObjectHeapCompactionMode 枚举 属性的值 GCSettings.LargeObjectHeapCompactionMode 是 GCLargeObjectHe 阅读全文
posted @ 2022-02-25 16:30 小林野夫 阅读(1262) 评论(0) 推荐(0) 编辑
摘要:原文链接:https://docs.microsoft.com/zh-cn/dotnet/standard/garbage-collection/large-object-heap NET 垃圾回收器 (GC) 将对象分为小型和大型对象。 如果是大型对象,它的某些特性将比对象较小时显得更为重要。 例 阅读全文
posted @ 2022-02-24 00:12 小林野夫 阅读(637) 评论(0) 推荐(0) 编辑
摘要:GC 管理内存分配和回收 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 https://docs.microsoft.com/zh-cn/dotnet/standard/automatic-memory-management GC内存分配原则 暂时代:因为第 0 代和第 1 代中的对象 阅读全文
posted @ 2022-02-23 18:20 小林野夫 阅读(261) 评论(0) 推荐(0) 编辑
摘要:原文:https://docs.microsoft.com/zh-cn/dotnet/standard/automatic-memory-management 自动内存管理是公共语言运行时在托管执行过程中提供的服务之一。 公共语言运行时的垃圾回收器为应用程序管理内存的分配和释放。 对开发人员而言,这 阅读全文
posted @ 2022-02-23 17:41 小林野夫 阅读(162) 评论(0) 推荐(0) 编辑
摘要:触发垃圾回收算法的条件 触发垃圾回收的条件 当满足以下条件之一时将发生垃圾回收: 操作系统报告低内存请看(将触发第2代垃圾回收)。 这是通过 OS 的内存不足通知或主机指示的内存不足检测出来。 由托管堆上已分配的对象使用的内存超出了可接受的阈值。 随着进程的运行,此阈值会不断地进行调整。触发第0代回 阅读全文
posted @ 2022-02-23 16:48 小林野夫 阅读(756) 评论(0) 推荐(1) 编辑
摘要:.net主要有两种类型垃圾回收器,也可也说是垃圾回收器的两种工作模式。 GC的类型主要有两种; 工作模式是针对进程的,程序启动后就不能修改了。只能在配置文件.json .xml进行设置。但是可用通过GCSeting类的GCLatencyMode进行微调(也叫延迟模式)。 工作站(默认的.NET程序都 阅读全文
posted @ 2022-02-23 15:54 小林野夫 阅读(1533) 评论(0) 推荐(0) 编辑
摘要:延迟模式 lowlatency 使用环境:后台工作方式只影响第 2 代中的垃圾回收;第 0 代和第 1 代中的垃圾回收始终是非并发的,因为它们完成的速度很快。GC模式是针对进程配置的,进程运行期间不能更改,但是应用程序使用GCsetting类的GClatencyMode属性对垃圾回收进行某种程度的控 阅读全文
posted @ 2022-02-23 15:47 小林野夫 阅读(745) 评论(0) 推荐(0) 编辑
摘要:前言 自从.NET Core 3.0开始对根据自己具体的应用场景去配置GC ,让GC 发挥最好的作用。.NET 5 改动更大,而且.NET 5整体性能比.net core 3.1高20%,并且在GC这块.NET 5开放了更多配置,所以.NET 5很值得关注。 GC管理你服务的内存分配和释放,GC在运 阅读全文
posted @ 2022-02-22 18:05 小林野夫 阅读(294) 评论(0) 推荐(0) 编辑
摘要:上一篇我介绍了Hash函数 这篇我来说一下Hash函数在 HashTable中的应用。 HashTable的特性: 1、装载因子:.net core 0.72 ,java 0.75 2、冲突解决方案:Hashtable使用了闭散列法来解决冲突,java采用 开散列法解决冲突. 3、bucket(桶) 阅读全文
posted @ 2022-02-22 15:41 小林野夫 阅读(551) 评论(0) 推荐(0) 编辑
摘要:希函数定义 哈希函数(英語:Hash function)又称散列函数、散列函数、摘要算法、单向散列函数。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个(哈希函数返回的值)称为指纹、哈希值、哈希代码、摘要或散列值(hash values,has 阅读全文
posted @ 2022-02-22 02:31 小林野夫 阅读(1527) 评论(0) 推荐(0) 编辑
摘要:Hashtable 和 Dictionary <K, V> 类型 1):单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分. 2):Dictionary和HashTable内部实现差不多,但前者无需装箱拆箱操作,效率略高一点。 3):多线程程序中推荐使用Co 阅读全文
posted @ 2022-02-22 02:10 小林野夫 阅读(566) 评论(0) 推荐(0) 编辑
摘要:字节顺序,又称端序或尾序(英語:Endianness),在计算机科学领域中,指電腦記憶體中或在数字通信链路中,组成多字节的字的字节的排列顺序。 例如假设上述变量x类型为int,位于地址0x100处,它的值为0x01234567,地址范围为0x100~0x103字节,其内部排列顺序依赖于机器的类型。大 阅读全文
posted @ 2022-02-21 16:00 小林野夫 阅读(4540) 评论(2) 推荐(0) 编辑
摘要:作用 在使用.NET编写的代码在debug时很容易进行排查和定位问题,一旦项目上线并出现问题的话那么只能依靠系统日志来进行问题排查和定位,但当项目复杂时,即各种方法间相互调用将导致要获取具体的出错方法或调用者将是一件不那么容易的事(因为没有PDB文件) 还好.NET提供了一系列系统组件来帮助我们获取 阅读全文
posted @ 2022-02-20 17:55 小林野夫 阅读(3993) 评论(0) 推荐(4) 编辑
摘要:异常概述 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。设计类型时要想好各种使用情况类型名称通常是名词,例如filestream或者st 阅读全文
posted @ 2022-02-20 16:38 小林野夫 阅读(648) 评论(0) 推荐(0) 编辑
摘要:装载自:https://docs.microsoft.com/zh-cn/visualstudio/debugger/managing-exceptions-with-the-debugger?view=vs-2022 以下是部分摘抄 在 Visual Studio 中使用调试器管理异常 “异常设置 阅读全文
posted @ 2022-02-20 12:22 小林野夫 阅读(511) 评论(0) 推荐(0) 编辑
摘要:栈溢出:死循环、递归调用,C# 的堆栈大小对于 32 位进程只有 1 MB,对于 64 位进程只有 4 MB如下: Main(args); static void Main(string[] args) { Main(args); } /* 输出: Stack overflow. Repeat 24 阅读全文
posted @ 2022-02-19 19:13 小林野夫 阅读(1444) 评论(0) 推荐(0) 编辑
摘要:ParallelOptions 构造函数 此构造函数用默认值初始化实例。 MaxDegreeOfParallelism 初始化为-1,表示没有对应采用的并行度进行上限设置。 CancellationToken 初始化为不可取消的标记,并 TaskScheduler 初始化为默认计划程序 (TaskS 阅读全文
posted @ 2022-02-18 19:33 小林野夫 阅读(2204) 评论(0) 推荐(0) 编辑
摘要:总结 总之,要编写一个健壮的并行循环,必须在并行循环体中检测 ParallelLoopState 对象的 IsExceptional, IsStopped 和 LowestBreakIteration 三个属性,出于简化编程的目的, ParallelLoopState 提供了一个 ShouldExi 阅读全文
posted @ 2022-02-18 16:32 小林野夫 阅读(561) 评论(0) 推荐(0) 编辑
摘要:1,异步编程 异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。 如果使用回调或事件来实现(容易callback hell),不仅编写这样的代码不直观,很快就容易把代码搞得一团糟。不过在.NET 4.5(C# 5)中引入的as 阅读全文
posted @ 2022-02-17 17:42 小林野夫 阅读(137) 评论(0) 推荐(1) 编辑
摘要:使用条件 1、必须熟练掌握锁、死锁、task的知识,他是建立这两个的基础上的。task建立在线程和线程池上的。 2、并不是所有代码都适合并行化。 例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 3、 Parallel.For()和Pa 阅读全文
posted @ 2022-02-17 16:55 小林野夫 阅读(126) 评论(0) 推荐(0) 编辑
摘要:前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel。 Channel在% dotnet add package System.Threading.Channels 而在Core 3.0 preview 7开始,就直接包含在框架中了。 是一个相对较新的特性。从Core 2. 阅读全文
posted @ 2022-02-17 02:10 小林野夫 阅读(2016) 评论(1) 推荐(2) 编辑
摘要:概要 1、如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本。这是因为您需要使用 AsTask 方法将 ValueTask<T> 转换为 Task<T>这将产生一个分配,如果首先使用了缓存的 阅读全文
posted @ 2022-02-17 01:55 小林野夫 阅读(1065) 评论(0) 推荐(1) 编辑
摘要:[MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展) 阅读全文
posted @ 2022-02-16 14:08 小林野夫 阅读(3637) 评论(0) 推荐(1) 编辑
摘要:5,MethodImpl 特性 此特性在 System.Runtime.CompilerServices 命名空间中,指定如何实现方法的详细信息。 内联函数使用方法可参考 https://www.whuanle.cn/archives/995 作用域:MethodImpl 特性可以影响 JIT 编译 阅读全文
posted @ 2022-02-16 13:42 小林野夫 阅读(3031) 评论(0) 推荐(2) 编辑
摘要:函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程是要耗费时间的。 C# 函数执行 return 语句返回时,需要从栈中回收形参和局部 阅读全文
posted @ 2022-02-16 13:26 小林野夫 阅读(171) 评论(0) 推荐(0) 编辑
摘要:首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆。CTR:设置引用类型,值类型。GC:只负责回收托管对象,不负责回收非托管对象。垃圾回收器的基本假定: 1.被分配内 阅读全文
posted @ 2022-02-16 13:17 小林野夫 阅读(631) 评论(0) 推荐(0) 编辑
摘要:原文:https://python.iitter.com/other/47604.html 前言 在上篇文章浅谈C#取消令牌CancellationTokenSource[1]一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回调 阅读全文
posted @ 2022-02-15 15:55 小林野夫 阅读(323) 评论(0) 推荐(0) 编辑
摘要:原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了async/await语法糖。自那 阅读全文
posted @ 2022-02-12 19:29 小林野夫 阅读(1278) 评论(0) 推荐(1) 编辑
摘要:原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题。能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值。这种概念很难融入现有的语言。awaitTask<T> 底线是不允许构造函数,因此让我们探索一些替代方 阅读全文
posted @ 2022-02-12 17:55 小林野夫 阅读(405) 评论(0) 推荐(0) 编辑
摘要:在我们深入研究"异步OOP"之前,让我们解决一个相当常见的问题:如何处理异步方法的继承?那么"异步接口"呢? 幸运的是,它确实可以很好地与继承(和接口)一起使用。请记住,这是一个实现细节,因此无法使用 定义接口。要在接口中定义异步方法,只需定义具有相同签名的方法,减去关键字:async 如下: in 阅读全文
posted @ 2022-02-12 17:24 小林野夫 阅读(169) 评论(0) 推荐(0) 编辑
摘要:[MethodImpl(MethodImplOptions.Synchronized)]与lock机制 在进行.NET开发时,经常会遇见如何保持线程同步的情况。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerSe 阅读全文
posted @ 2022-02-11 18:12 小林野夫 阅读(281) 评论(0) 推荐(0) 编辑
摘要:在 C# 语言中允许在程序运行时输出程序的调试信息,类似于使用 Console.WriteLine 的方式向控制台输出信息。所谓调试信息是程序员在程序运行时需要获取的程序运行的过程,以便程序员更好地解决程序中出现的问题,这种调试也被称为是非中断调试。输出调试信息的类保存在 System.Diagno 阅读全文
posted @ 2022-02-11 16:57 小林野夫 阅读(1497) 评论(0) 推荐(0) 编辑
摘要:概览 在学task类之前必须学习线程的知识。 以下是task命名空间的类的结构图 1、2种任务类型: 有返回值task<TResult> 、无返回值task。 2、2座任务工厂 TaskFactory/TaskFactory<TResult> 3、2种TaskCompletionSource/Tas 阅读全文
posted @ 2022-02-09 16:32 小林野夫 阅读(945) 评论(0) 推荐(0) 编辑
摘要:TaskCompletionSource具体功能 用于封装一个没有不带委托的任务实列。可以在其他线程控制该任务实列什么时候结束、取消、错误。类似于EventWaitHandle的功能。 属性 Task 方法 SetCanceled:将TaskCompletionSource.Task 转换为Canc 阅读全文
posted @ 2022-02-09 11:19 小林野夫 阅读(5954) 评论(0) 推荐(3) 编辑
摘要:TaskContinuationOptions 根据 TaskContinuationOptions 的不同,出现了三个分支 LongRunning:独立线程,和线程池无关 包含 PreferFairness时:preferLocal=false,进入全局队列 不包含 PreferFairness时 阅读全文
posted @ 2022-02-06 13:11 小林野夫 阅读(1050) 评论(0) 推荐(2) 编辑
摘要:[No0000152]C#基础之IL,轻松读懂IL 先说说学IL有什么用,有人可能觉得这玩意平常写代码又用不上,学了有个卵用。到底有没有卵用呢,暂且也不说什么学了可以看看一些语法糖的实现,或对.net理解更深一点这些虚头巴脑的东西。其实IL本身逻辑很清楚,主要是把指令的意思搞明白就好办了。记指令只要 阅读全文
posted @ 2022-02-06 10:29 小林野夫 阅读(1783) 评论(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 小林野夫 阅读(144) 评论(0) 推荐(0) 编辑

原文链接:https://www.cnblogs.com/cdaniu/