随笔分类 - C#
摘要:异常概述 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。设计类型时要想好各种使用情况类型名称通常是名词,例如filestream或者st
阅读全文
摘要:装载自:https://docs.microsoft.com/zh-cn/visualstudio/debugger/managing-exceptions-with-the-debugger?view=vs-2022 以下是部分摘抄 在 Visual Studio 中使用调试器管理异常 “异常设置
阅读全文
摘要:栈溢出:死循环、递归调用,C# 的堆栈大小对于 32 位进程只有 1 MB,对于 64 位进程只有 4 MB如下: Main(args); static void Main(string[] args) { Main(args); } /* 输出: Stack overflow. Repeat 24
阅读全文
摘要:ParallelOptions 构造函数 此构造函数用默认值初始化实例。 MaxDegreeOfParallelism 初始化为-1,表示没有对应采用的并行度进行上限设置。 CancellationToken 初始化为不可取消的标记,并 TaskScheduler 初始化为默认计划程序 (TaskS
阅读全文
摘要:总结 总之,要编写一个健壮的并行循环,必须在并行循环体中检测 ParallelLoopState 对象的 IsExceptional, IsStopped 和 LowestBreakIteration 三个属性,出于简化编程的目的, ParallelLoopState 提供了一个 ShouldExi
阅读全文
摘要:1,异步编程 异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blocking on waiting)。 如果使用回调或事件来实现(容易callback hell),不仅编写这样的代码不直观,很快就容易把代码搞得一团糟。不过在.NET 4.5(C# 5)中引入的as
阅读全文
摘要:使用条件 1、必须熟练掌握锁、死锁、task的知识,他是建立这两个的基础上的。task建立在线程和线程池上的。 2、并不是所有代码都适合并行化。 例如,如果某个循环在每次迭代时只执行少量工作,或它在很多次迭代时都不运行,那么并行化的开销可能导致代码运行更慢。 3、 Parallel.For()和Pa
阅读全文
摘要:前言 今天给大家分享一个微软官方的生产者/消费者方案的特性解决:Channel。 Channel在% dotnet add package System.Threading.Channels 而在Core 3.0 preview 7开始,就直接包含在框架中了。 是一个相对较新的特性。从Core 2.
阅读全文
摘要:概要 1、如果异步方法的使用者使用 Task.WhenAll 或 Task.WhenAny,则在异步方法中使用 ValueTask<T> 作为返回类型可能会产生高昂的成本。这是因为您需要使用 AsTask 方法将 ValueTask<T> 转换为 Task<T>这将产生一个分配,如果首先使用了缓存的
阅读全文
摘要:[MethodImpl(MethodImplOptions.AggressiveInlining)] 内联函数 Impl:implement的缩写 内联函数 在计算机科学中,内联函数(有时称作在线函数或编译时期展开函数)是一种编程语言结构,用来建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)
阅读全文
摘要:5,MethodImpl 特性 此特性在 System.Runtime.CompilerServices 命名空间中,指定如何实现方法的详细信息。 内联函数使用方法可参考 https://www.whuanle.cn/archives/995 作用域:MethodImpl 特性可以影响 JIT 编译
阅读全文
摘要:函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后才跳转到函数内部执行。这个过程是要耗费时间的。 C# 函数执行 return 语句返回时,需要从栈中回收形参和局部
阅读全文
摘要:首先要指导GC的机制,这部分转载自:http://blog.csdn.net/qq_20949153/article/details/52188882CLR:公共运行时环境,管理托管堆。CTR:设置引用类型,值类型。GC:只负责回收托管对象,不负责回收非托管对象。垃圾回收器的基本假定: 1.被分配内
阅读全文
摘要:原文:https://python.iitter.com/other/47604.html 前言 在上篇文章浅谈C#取消令牌CancellationTokenSource[1]一文中我们讲解了CancellationTokenSource,它的主要功能就是分发一个令牌,当我取消令牌我可以进行一些回调
阅读全文
摘要:原文:https://devblogs.microsoft.com/dotnet/configureawait-faq/ 作者:Stephen 翻译:xiaoxiaotank 静下心来,你一定会有收获。 七年前(原文发布于2019年).NET的编程语言和框架库添加了async/await语法糖。自那
阅读全文
摘要:原文:异步 OOP 2:构造函数 (stephencleary.com) 异步构造带来了一个有趣的问题。能够在构造函数中使用会很有用,但这意味着构造函数必须返回一个表示将来将构造的值,而不是构造的值。这种概念很难融入现有的语言。awaitTask<T> 底线是不允许构造函数,因此让我们探索一些替代方
阅读全文
摘要:在我们深入研究"异步OOP"之前,让我们解决一个相当常见的问题:如何处理异步方法的继承?那么"异步接口"呢? 幸运的是,它确实可以很好地与继承(和接口)一起使用。请记住,这是一个实现细节,因此无法使用 定义接口。要在接口中定义异步方法,只需定义具有相同签名的方法,减去关键字:async 如下: in
阅读全文
摘要:[MethodImpl(MethodImplOptions.Synchronized)]与lock机制 在进行.NET开发时,经常会遇见如何保持线程同步的情况。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerSe
阅读全文
摘要:概览 在学task类之前必须学习线程的知识。 以下是task命名空间的类的结构图 1、2种任务类型: 有返回值task<TResult> 、无返回值task。 2、2座任务工厂 TaskFactory/TaskFactory<TResult> 3、2种TaskCompletionSource/Tas
阅读全文
摘要:TaskCompletionSource具体功能 用于封装一个没有不带委托的任务实列。可以在其他线程控制该任务实列什么时候结束、取消、错误。类似于EventWaitHandle的功能。 属性 Task 方法 SetCanceled:将TaskCompletionSource.Task 转换为Canc
阅读全文