勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。程序如下: private void button1_Click(object sender, EventArgs e)
{
&n
勇哥注:《多线程安全》这个系列会持续写下去,它是我的一个弱点,有兴趣的朋友可以选择性看看。运行源码后,执行button1 for (int i = 0; i < 5; i++)
{
&
勇哥注:关注这个话题是因为看到C#的关键字 lock时,其传入引用对象。因为string也是引用对象,所以能否做为lock的参数?对于这个问题,要搞明白C#的字符串的一个特点,它使用类似于享元模式的机制。因此在lock中锁字符串是相当不安全的。下面贴子是对C#字符串与享元模式的深入讨论。写这个文章,主要是因为网上对C#字符串和享元模式的误解比较多。Flyweight模式先说这名字,fly呢,就是苍蝇,没错这里面不是飞的意思,是苍蝇的意思,weight大家都知道,就是重量,苍蝇的重量,就是非常非常
勇哥手里一个无刷电机,采用485的modelbus crc16协议来控制。因此需要一个计算校验和的工具。源码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text
勇哥注:此文转载自:https://michaelscodingspot.com/find-fix-and-avoid-memory-leaks-in-c-net-8-best-practices/任何从事过大型企业项目的人都知道内存泄漏就像大酒店里的老鼠。当它们很少时,您可能不会注意到,但是您必须始终保持警惕,以防它们人口过多,闯入厨房并在所有东西上大便。查找、修复和学习避免内存泄漏是一项重要技能。我将列出我和高级 .NET 开发人员使用的 8 种最佳实践技术,这些技术为我提供了本文的建议。这
1. 什么是.Net内存泄露(1).NET 应用程序中的内存您大概已经知道,.NET 应用程序中要使用多种类型的内存,包括:堆栈、非托管堆和托管堆。这里我们需要简单回顾一下。以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。在运行库的控制下执行的代码称作托管代码。相反,在运行库之外运行的代码称作非托管代码。COM 组件、ActiveX 接口和 Win32 API 函数都是非托管代码的示例。COM/COM++组件,ActiveX
勇哥注:大家都知道在window里,进程之间通讯可以用消息通讯。但是有个较冷门的知识就是RegisterWindowMessage。一般的sendmessage和postmessage是需要在窗体程序间进行通讯,你得知道对方窗口的句柄。这个句柄每次启动程序时是系统分配的,每次不一样。有了这个RegisterWindowMessage,两个进程可以共同持有一个相同的“句柄”,然后两者的顶层窗体间可以持这个“句柄”进行通讯。你不需要知道对方的窗体句柄是什么!下面是引用自网络的文章,作者用C++讲述。
经过两个多小时的google和试探,终于搞定了一段代码.通过这个代码可以控制当前线程的CPU使用量.下面是代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
using 
sender as ObservableCollection<string> 为啥为null ? 查看下sender的传入值,确实是有内容的。查看下sender的定义如下,确实是一个ObservableCollection<string>类型。用即时窗口看下:sender is List<string>
false
sender is ObservableCollection<string>
勇哥注:最近开发的软件遇到一些问题,主要是爆cpu时间,这样的后果是软件运行时间一长就会越跑越慢,最终UI失去响应。用vs来排除,目前只知道对可疑代码进行失能,再配合任务管理器观察 :cpu使用率, cpu时间,线程,句柄等参数来判断可疑代码是不是有问题。如果搜索一下网络,貌似这个问题大部分答案只是对线程做sleep,没啥子可用的信息。因此是时候涨点知识了,我把学习方向放在用WinDbg调试用户模式.net程序上。系列贴子目录:WinDbg 入门三:调试DumpWinDbg 入门二:基本指令介绍