2021-09-17 16:57:43
目录介绍究竟什么是事件?第 1 部分:侦听器端弱事件解决方案 0:只需注销解决方案 1:当事件被调用时注销解决方案 2:弱引用的包装器解决方案 3:在终结器中注销解决方案 4:可重复使用的包装器解决方案 5:WeakEventManager第 2 部分:源端弱事件解决方案0:接口解决方案 1:对委托的弱引用方案二:对象+转发器解决方案 3:SmartWeakEvent解决方案 4:FastSmar...
2021-09-17 16:45:17
转载自:https://michaelscodingspot.com/5-techniques-to-avoid-memory-leaks-by-events-in-c-net-you-should-know/ C#(以及一般的 .NET)中的事件注册是内存泄漏的最常见原因。至少从我的经验来看。事实上,我从事件中看到了如此多的内存泄漏,以至于 在代码中看到 +=立即让我产生怀疑。虽然事件是伟大的,...
2021-09-17 16:13:16
勇哥注:此文转载自:https://michaelscodingspot.com/find-fix-and-avoid-memory-leaks-in-c-net-8-best-practices/任何从事过大型企业项目的人都知道内存泄漏就像大酒店里的老鼠。当它们很少时,您可能不会注意到,但是您必须始终保持警惕,以防它们人口过多,闯入厨房并在所有东西上大便。查找、修复和学习避免内存泄漏是一项重要技...
2021-09-17 11:02:46
1. 什么是.Net内存泄露(1).NET 应用程序中的内存您大概已经知道,.NET 应用程序中要使用多种类型的内存,包括:堆栈、非托管堆和托管堆。这里我们需要简单回顾一下。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。在运行库的控制下执行的代码称作托管代码。相反,在运行库之外运行的代码称作非托管代码。COM 组件、ActiveX 接口和 Win32 API 函数...
2021-09-16 14:29:46
勇哥注:大家都知道在window里,进程之间通讯可以用消息通讯。但是有个较冷门的知识就是RegisterWindowMessage。一般的sendmessage和postmessage是需要在窗体程序间进行通讯,你得知道对方窗口的句柄。这个句柄每次启动程序时是系统分配的,每次不一样。有了这个RegisterWindowMessage,两个进程可以共同持有一个相同的“句柄”,然后两者的顶层窗体间可以...
2021-09-11 19:11:23
一:背景1. 讲故事2. windbg验证一下二:对GC代机制的理解1. CLR堆模型2. 对临时内存段的解释<1> 为啥小对象堆中有一个临时内存段?<2> 临时内存段大小是多少?3. 代机制简介三:代机制原理的代码演示1. 探究 gen0 上的student1 和 studnet22. 探究 student1 被消灭,student2进入gen13. 探究student2...
2021-09-09 08:14:25
!heap!heap 扩展显示堆使用信息,控制堆管理器中的断点,检测泄露的堆块,搜索堆块或者显示页堆(page heap)信息。语法Windows NT 4.0的语法!heap [HeapOptions] [ValidationOptions] [Heap] !heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress] !heap -B {...
2021-09-08 08:13:21
经过两个多小时的google和试探,终于搞定了一段代码.通过这个代码可以控制当前线程的CPU使用量.下面是代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.InteropS...
2021-09-06 11:16:12
sender as ObservableCollection<string> 为啥为null ? 查看下sender的传入值,确实是有内容的。查看下sender的定义如下,确实是一个ObservableCollection<string>类型。用即时窗口看下:sender is List<string>
false
sender is ObservableC...
2021-09-02 21:06:53
尽管在.NET framework下我们并不需要担心内存管理和垃圾回收(GarbageCollection),但是我们还是应该了解它们,以优化我们的应用程序。同时,还需要具备一些基础的内存管理工作机制的知识,这样能够有助于解释我们日常程序编写中的变量的行为。在本文中我将讲解栈和堆的基本知识,变量类型以及为什么一些变量能够按照它们自己的方式工作。在.NET framework环境下,当我们的代码执行...
2021-09-02 20:55:26
(一)一些相关指令的测试【线程池耗尽】!threadpool 能看到完成端口,线程池工作线程和timer回调各占线程池的情况。0:000> !threadpool
CPU utilization: 6%
Worker Thread: Total: 8 Running: 4 Idle: 4 MaxLimit: 32767 MinLimit: 12
Work Request in Queu...
2021-09-02 19:18:30
勇哥注:最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模...
2021-09-02 18:48:35
勇哥注:最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模...
2021-09-01 20:31:02
勇哥注:最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模...
2021-08-26 10:47:13
勇哥注:微软又整出一堆新概念,咱们只能了解一下扫下盲,就学习精力而言,年轻人才是未来。。。.当今 net 生态系统如下: 从上面图中我们可以看到.net 主要分为三个部分 .net FrameWork,.net Core ,XamarinXAMARIN 主要用来构建APP的(包括IOS,Android Windows)主要用的是C#语言The .NET Framework 这个是我们现在经常...
2021-08-02 14:34:12
本文转载自k_set原创内容点击打开链接WinForm加载多个自定义控件时,会出现很严重的闪烁问题,很卡,一块一块的加载(像打开网页时,网络很卡的那种感觉)简直没法忍受。在网上搜索了好久,网上大部分的方法是一下4种,但是都不能有效的解决问题。 1.将DoubleBuffered 设置 true,用双缓存处理Form界面内容加载,可以提高页面显示质量。或者SetStyle(ControlStyle...
2021-07-30 08:03:39
勇哥注:事件很常见,但有重复的代码量。如果你想简化一下事件的编程,而且是整个程序只使用一个像事件池一样的东西,可以尝试使用下文讲的ObservableCollection观察者集合来做到。ObservableCollection<T>类表示一个动态数据集合,在添加项,移除项或刷新整个列表时,刺激和将提供通知通知可以由下面的枚举知晓你对集合做了什么才触发的事件。using System;...
2021-07-30 08:00:26
对一个服务器程序想统计每秒可以处理多少数据包,要如何做?答案是用处理数据包的总数,除以累记处理数据包用的时间。这里要指出的是, 运行一段程序,使用的cpu时间,跟实际运行的时间是不一样的。附例如下:private void ShowRunTime()
{
TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessor...
2021-07-29 16:33:48
勇哥注:.Net的Stopwatch类可以精确到1/10000毫秒, 有没有更精确的计时吗?见下面的代码。暂时没试过效果,大家可以试下。计算某个代码片段的执行时间,精确到CPU执行一条指令所用的时间(十亿分之一秒),可用于精确计算某个算法的执行时间。代码:using System;
using System.Runtime.InteropServices;
using System.Compo...
2021-07-29 16:16:38
正在c#程序优化时,如果多线程效果不佳的情况下,也会使用多进程的方案,如下:System.Threading.Tasks.Task task=System.Threading.Tasks.Task.Factory.StartNew(
(object mystate) =>
{...
2021-07-29 13:32:41
勇哥注:我在用Task的时候,它处理完毕后,还能检测到它下图的这些状态。于是在想,Task处理完毕后是否需要做清理工作呢?正好今天看到一个博主聊到这个话题。传送门:异步编程系列目录…… 摘要:本博文解释在.NET 4.X中的Task使用完后为什么不应该调用Dispose()。并且说明.NET4.5对.NET4.0的Task对象进行的部分改进:减轻Task对WaitHandle对象的依赖,并且增强在...
2021-07-29 11:54:34
勇哥注:大家好,我是微软的搬运工,今天搬一个忽略的知识点。索引器允许类或结构的实例就像数组一样进行索引。 无需显式指定类型或实例成员,即可设置或检索索引值。 索引器类似于属性,不同之处在于它们的访问器需要使用参数。以下示例定义了一个泛型类,其中包含用于赋值和检索值的简单 get 和 set 访问器方法。 Program 类创建了此类的一个实例,用于存储字符串。using System;
cl...
2021-07-28 16:12:31
勇哥注:这位博主总结了来自于视频的一些学习资料,感谢他的分享,内容是相当经验化的总结。文章很长,有空我会做些排版,先凑合着看吧。#线程详解1. Thread基础之从 WinDbg 角度理解你必须知道的时间和空间上的开销一:空间上的开销1、thread本身来说就是操作系统的概念。。。<1> thread的内核数据结构,其中有osid,context => CPU寄存器的里面的一些变...
2021-07-27 10:19:59
勇哥要做到的目标是:task工厂按添加的顺序依次执行。下面程序我规定的顺序为: A...A...B...B...C...C...从源码一来看,每次执行次序都不同。如果我们把lock那段代码启用,效果如下:可以看到仅保证了两次输出是连续,而不能保证执行顺序跟task工厂add的顺序一样。代码还有一个问题是:myScheduler调度器并没有发挥作用,twork根本执行不到。以上问题的解决版本见后面...
2021-07-27 08:09:34
这个问题网上的经验大概如下:1。 清空方案,重新编译2。 删除项目bin目录下的东西,重新编译3。 解决相互引用的问题。4。 确保不是run的release5。把项目编译改为x866。 好像没发现其它的了。。。这些解决不了勇哥手上的项目的问题。勇哥的工程有几十个项目。我长话短说,解决方法是:引导项目除了直接用到的项目需要引用外,还需要引用那些无法下断点的项目。这样做的目的是让每次run引导项目时,...
2021-07-24 21:28:09
关于项目引用,有几种:(一)这种是引用系统的程序集(二)下面这种是引用你自己的项目“解决方案”(三)最后一种是浏览本机上的项目的dll。对于工程中有几十个项目的软件来说,虽然使用(二)是很方便。但是会编译速度奇慢,而且随着项目越多越慢。貌似他run之前都会把所有项目都试图更新一下。勇哥宿舍的电脑,实在是不堪重负,逼得不得已,使用(三),速度果然就快多了。当然它的缺点是,你得手工更新改变过的项目。-...
2021-07-23 14:15:05
如下所示:vs2015的任务列表怎么只显示几个项目的todo,而这个工程有几十个项目,原来是都可以显示的。这是为啥子呢?全部重新编译也不行。如果勇哥知道了原因,再来回贴子。附录:任务列表介绍:前几天才刚开始看到这个很多时候,一些任务,怕忘记了,或者已经做好的东西,由于各种原因,暂时不用等等这种情况这时候,就可以在vs上,随时加到任务列表中,方面下次直接来修改或实现等等 在vs的视图》任务列表,快捷...
2021-07-23 09:21:37
牛牛们的博客,相当的经验之谈,营养丰富,值得把读。https://www.cnblogs.com/huangxincheng https://blog.csdn.net/weixin_45157396/article/details/109398357?spm=1001.2014.3001.5501 https://github.com/ctripxchuang/dotnetfly...
2021-07-21 23:27:41
下面的代码示例演示如何实现 INotifyPropertyChanged 接口。 在 Windows 窗体数据绑定中使用的业务对象上实现此接口。 实现时,接口会与绑定控件通信,属性会对业务对象进行更改。示例:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Dra...
2021-07-19 23:24:28
一般如果逻辑比较简单,只是存在有的情况多一个查询条件,有的情况不需要添加该查询条件简单方式这样操作就可以了public IQueryable<FileImport> DynamicChainedSyntax
(IQueryable<FileImport> files, bool pastOnly)
{
var query = files.Where(file =...