C#
文章平均质量分 56
分享关于C#的一些浅见
杞人忧天abc
扬子江头杨柳春,杨花愁煞渡江人。
数声风笛离亭晚,君向潇湘我向秦。
展开
-
C#消息泵探索(二)
消息泵,又叫消息循环。消息循环使用一个图形化用户界面下的Microsoft Windows。具有GUI 的Windows 程序是事件驱动的。Windows为每个创建窗口的线程维护一个单独的消息队列。通常只有第一个线程创建窗口。Windows 放置消息每当鼠标活动发生在该线程的窗口上时,每当该窗口具有焦点时键盘活动发生时,以及其他时候,都将进入该队列。进程还可以将消息添加到自己的队列中。为了接受用户输入以及出于其他原因,具有窗口的每个线程必须不断地从其队列中检索消息,并对其采取行动。原创 2023-02-25 10:13:56 · 292 阅读 · 0 评论 -
winform高dpi问题探索
winform的高dpi适应问题由来已久,属于一个历史遗留问题。主要是由于winform对不同尺寸、不同分辨率的屏幕适配不足造成的。接下来我们简单说一下如何解决,最后我们探索一下解决此问题的原理。解决办法winform的高dpi问题虽然一直没能解决,不过官方还是打了一个补丁的。我们只需要调用一下官方提供的DpiHelper.LogicalToDeviceUnits方法,即可解决。那么问题来了,官方是如何解决这个问题的呢?探索public double LogicalToDevice原创 2022-01-05 10:36:53 · 1365 阅读 · 0 评论 -
C# GC探索
垃圾收集当您在 C# 中创建任何对象时,CLR(公共语言运行时)会从堆中为该对象分配内存。每个新创建的对象都会重复这个过程,但凡事都有限制,内存不是无限的,我们需要清理一些使用过的空间,以便为新对象腾出空间,这里介绍垃圾回收的概念, 垃圾收集器管理内存的分配和回收。GC(垃圾收集器)在堆上进行一次旅行,收集应用程序不再使用的所有对象,然后将它们从内存中释放出来。当任何进程被触发时,单独的虚拟空间被分配给该进程,从一个系统的每个进程使用的相同的物理内存中,任何程序处理虚拟空间而不是物理内存,GC也处理原创 2021-12-23 10:51:37 · 161 阅读 · 0 评论 -
Winfrom ComboBox中的性能探索
在为Control维护元素列表的过程中,会不可避免的造成性能损耗,我们接下来要探究的就是那种方式才是我们的最优解。方案比较以ComboBox为例,常见的方式一共有两种:Add、AddRange。AddList<int> vs = new List<int>(); for (int i = 0; i < 100; i++) { vs.Add(i); }原创 2021-10-21 16:24:51 · 157 阅读 · 0 评论 -
C# 数据结构之嵌套加法、嵌套乘法
复杂性度量问题1.大O复杂度:嵌套加法找出以下代码片段的 Big O 复杂度。using System; namespace Chapter_1{ class Challenge_1 { static void Main(string[] args) { int n = 10; int sum = 0; float pie = 3.14F; for原创 2021-10-18 16:12:39 · 338 阅读 · 0 评论 -
Nlog连接密码隐藏
原创 2021-09-22 09:58:18 · 78 阅读 · 0 评论 -
C#中延迟初始化实现原理的一点浅见。
C#中延迟初始化实现原理的一点浅见。定义延迟初始化:一个对象的延迟初始化意味着它的创建被推迟到它第一次使用。(对于本主题,延迟初始化和延迟实例化是同义词。)延迟初始化主要用于提高性能、避免浪费计算和减少程序内存需求。用法及简单介绍关于解决方法,微软给出了三种解决方案,这里主要聊Lazy。用法没什么好聊的,一句代码搞定。主要属性有两个,第一个是Value, 用于获取初始化的model值。另一个则是IsValueCreated,用于判断model是否被初始化。除了以上两个属性外,还有Laz原创 2021-07-30 08:09:18 · 201 阅读 · 0 评论 -
浅析Winform的可视样式
每一个C#的Winfrom项目的Main方法里,都有这么一行代码,那么它究竟是用来做什么的呢?Application.EnableVisualStyles();从注释来看,这是一行用作设置样式的代码,那么它究竟设置了哪些样式呢?源码浅析public static void EnableVisualStyles() { string assemblyLoc = null; // SECREVIEW : This Assert is .原创 2021-08-03 10:19:23 · 414 阅读 · 0 评论 -
C#多路广播委托的一点浅见
C#多路广播委托的一点浅见以上是C#官方对委托的定义与介绍,常规的委托定义比如delegate void test(string str);但是这种委托通常是和一个事件绑定,我们需要编写观察者模式的项目时候通常会出现的现象是委托、事件与要调用方法进行一对多的绑定,这时候就需要用到多路广播委托,也就是多播委托。C#对于多播委托的支持的有两种,通过Delegate.Combine和MulticastDelegate.Combine和两种方式进行创建。以下我们主要介绍后者。微软对于MulticastD原创 2021-07-30 08:11:31 · 353 阅读 · 0 评论