- 博客(1180)
- 资源 (6)
- 收藏
- 关注
原创 【C#日常】C#集合Dictionary获取第一个键值
PS:拓展方法,我已经讲过很多次了,可以翻看这篇文章:https://blog.csdn.net/q764424567/article/details/109263902。PS:Linq是使用拓展方法,遍历了集合的查询过程,使用简单方便,非常的有用。首先,分析一下这个需求,如果是输入或者List返回第一个值是很容易的,直接数组[0] 或者List[0],就可以返回第一个值,但是这个在字典中是不适用的。使用拓展方法,模仿LInq查询,返回第一个键值。使用了Linq查询函数,返回第一个键值。
2024-06-25 11:23:33
1935
原创 C# wpf 实现窗口按比例缩放
做客户端有时为了让界面适用各种不同的系统分辨率,让界面内控件布局大小始终保存比例是一种方法。一般可以使用配置文件做不同分辨率的适配实现,或者通过代码根据不同的分辨率重新计算控件大小及位置实现。将窗口本身需要的容器设在ViewBox标签下,即成为二级容器,设置其大小。需要注意的是,二级容器大小必须大于等于适配的所有分辨率,比如适配的最大分辨率是1080p,则二级容器大小至少设为1080p。下面代码中,窗口是按照1920x1080设计的,但实际的窗口只有640x360,但其显示的效果控件比例始终是一样的。
2024-05-23 14:40:07
1419
原创 C# 正则表达式
Regex reg = new Regex(@"^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$");Regex reg = new Regex(@"[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?
2024-05-11 11:17:41
384
原创 notepad++的使用技巧
在任意行点击左边栏或者按Ctrl+F2会出现蓝色小点,这表示添加了一个书签,点击蓝色小点或按Ctrl+F2可以取消该行书签。取消单行注释:ctrl+shift+K(当快捷键重复时,可以自己设置,设置---管理快捷键)视图----移动/复制到当前文档-----移动到另一视图(可以配合水平/垂直同步滚动功能)选择一个括号,按Ctrl+b会跳转到与它对应的另外一半括号处。按Ctrl+g会弹出一个对话框,可以选择输入绝对行号跳转或者相对于当前行做偏移量跳转。展开当前层次: Ctrl+Alt+Shift+f。
2024-04-15 23:54:31
1432
原创 Visual Studio项目的生成事件代码
这句命令是将生成的dll复制到另一个路径并修改后缀,多行命令直接回车换行就可以,也可以使用(ProjectName).*表示与项目基本名字相同的所有文件进行复制。在vs中有时候需要将编译生成的文件复制到另一个路径下使用,这时候可以使用后期生成事件命令行来实现自动复制,同时还可以修改文件名或者后缀。进入编辑后期生成界面后,点击宏按钮可以查看相关字段代表的路径或者文件名等信息。可以直接插入到编辑位置处。
2024-03-16 12:25:53
471
原创 C#解析JSON
全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。"id": 2,"name": "星河爆破",},"id": 3,"name": "九星连珠",},"id": 4,"name": "一语成谶",学习JSON基础教程在线JSON解析在线JSON解析及格式化验证网站。
2024-02-29 16:40:44
2569
原创 c#使用log4net的3种调用方法
param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n日志内容:%m%n%n" /><param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n日志内容:%m%n%n" /><param name="ConversionPattern" value="日志时间:%d %n日志级别:%-5p %n日志内容:%m%n%n" />--< > = <> %n = 回车-->
2024-02-28 14:18:41
2431
原创 AppDomain 详解
而这个功能在某 些程序设计时是非常必要的,考虑你正在用反射机制写一个查看DLL中所有函数详细信息的程序,程序提供一个菜单让用户可以选择DLL文件,这时就需要让程 序能够卸载DLL,否则一旦用户重新得到新版本DLL时,必须要重新启动程序,重新选择加载DLL文件,这样的设计是用户无法忍受的。C#也提供了实现动态卸载DLL的方法,通过AppDomain来实现。3.MultiDomainHost,只有GAC代码是共享的,非GAC的Assembly依然会加载到被使用的AppDomain中,这样提高了静态变量的访问。
2024-02-26 17:45:16
1161
原创 wpf menu 菜单 快捷键
原文链接:https://blog.csdn.net/weixin_53370274/article/details/116518680。<RoutedUICommand x:Key="Search" Text="查找内容"/><RoutedUICommand x:Key="F3" Text="查找内容"/>//或者 //dg可以改为其它的控件或直接设置ContextMenu。Ctrl+F F3可加入其它,自行定义。Page可改为Windows。wpf button左键菜单。
2024-02-22 00:38:18
670
原创 WPF中DataGrid垂直滚动条滚动后行号错乱的解决办法
DataGrid 的 EnableRowVirtualization 属性默认值是True,就是说动态加载数据,只实例化屏幕内可见的数据;行头的内容是通过绑定实现的,但是滚动刷新时传入的DataGridRow并不是实际位置的行,而是虚拟的,造成行头显示内容错乱;原文链接:https://blog.csdn.net/qq_29821795/article/details/120409288。方法1:设置EnableRowVirtualization=“False",简单易行,但系统资源的开销大。
2024-02-21 13:46:56
909
原创 C#的 Settings.Settings配置文件的使用方法
从此以后,读取都会从系统里保存的值里读取,手工修改App.config里的“用户”范围的属性不会影响到这些属性,但是在调用Reset方法时会从新从App.config里获取“用户”范围的属性写入到系统中。范围为“应用程序”的属性,读取都是从APP.CONFIG里获取,设置也可以通过手工修改App.config改变,但是在程序中无法对其进行赋值,只能读取。3、内存----程序启动后,实例化settings对象,该实例在创建的时候从系统(如果系统中没有就如前面提到的从配置文件中获取)读取在内存中。
2024-02-20 14:11:46
1461
原创 String.format()详细用法
String 类有一个强大的字符串格式化方法 format()。下面是常用的方法总结。一、占位符类型String formatted = String.format("%s今年%d岁。", "小李", 25); // "小李今年25岁。"二、字符串和整数格式化 // 将第二个入参拼接到模板中,入参长度如果不足10 左侧用空格补齐,超过10全量输出System.out.println(String.format("%10s, world", "Hello"));// 输出 " Hello,
2024-02-19 15:33:34
9069
原创 C# 字符串格式化
也就是说,若要单独使用自定义格式说明符“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”或“M”,请指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。如果“E”、“E+”、“E-”、“e”、“e+”或“e-”中的任何一个字符串出现在格式字符串中,而且后面紧跟至少一个“0”字符,则数字用科学记数法来格式化,在数字和指数之间插入“E”或“e”。“E”、“E-”、“e”或“e-”格式指示符号字符仅置于负指数前面。
2024-02-19 15:14:27
2619
原创 关于Thread.sleep方法的一些使用
2、Mutex(互斥体):Mutex也是一种用于实现互斥访问的线程同步机制,它类似于Monitor,但具有更高级的功能。5、定时执行任务:在一些需要按照时间间隔执行任务的场景下,可以使用Thread.Sleep来控制任务的执行时间。例如,在定时器的实现中,可以使用Thread.Sleep来控制任务的执行间隔。例如,在游戏开发中,可以使用Thread.Sleep来模拟玩家的等待时间或者动画效果的展示。当涉及到多线程编程时,除了Thread.Sleep方法,还有一些更高级的线程同步机制可用于控制线程的执行。
2024-02-02 04:32:05
587
原创 explorer.exe 作用
有时候修改完注册表信息后需要点击F5按钮,当F5没用时候则需要重新启动,才能使修改生效,其实不需要这么麻烦.按下"CTRL+ALT+DEL",打开任务管理器结束进程选项中的Explorer.exe,然后在点击"任务管理器"中的"新建任务",在打开的文本框中输入Explorer.exe,然后回车确认,就重新加载了Explorer.exe,让注册表快速生效.如果用户发现任务管理器中有两个或多个Explorer.exe进程,那么就要检查是否中了远控了,最好用木马专杀工具扫扫。Explorer.exe是什么。
2024-01-15 21:44:43
2437
原创 C# 各数据类型 范围
long -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 有符号 64 位整数。int -2,147,483,648 到 2,147,483,647 有符号 32 位整数。ulong 0 到 18,446,744,073,709,551,615 无符号 64 位整数。类型 大致范围 精度。
2024-01-08 09:36:33
1114
原创 int 类型取值范围最大能到多少 16进制与2进制之间的转化 16进制占字节问题 16 进制与2进制的关联
0x7fffffff = 一共8个数, 一个 f 是 4个 二进制位 , 两个 f 才占用一个字节。0x7fffffff = 一共8个数, 一个 f 是 4个 二进制位 , 两个 f 才占用一个字节。原文链接:https://blog.csdn.net/judongbin123/article/details/81093275。所以,int占32位的时候,最大可以赋值为:2147483647。也就是0x7fffffff。
2024-01-08 09:32:55
707
原创 WPF 入门教程DispatcherTimer计时器
在 WinForms 中,有一个名为 Timer 的控件,它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性,但我们有控件,而不是不可见的控件。它几乎做同样的事情,但不是将它放在表单上,而是专门从代码隐藏代码中创建和使用它。DispatcherTimer 类的工作方式是指定一个时间间隔,然后订阅每次满足该时间间隔时将发生的事件。在调用方法或将属性设置为 true之前,不会启动 DispatcherTimer。XAML 部分非常简单——它只是一个带有大字体的居中标签,用于显示当前时间。
2024-01-05 17:29:17
1838
原创 WPF 如何知道当前有多少个 DispatcherTimer 在运行
在 WPF 中,如果有 DispatcherTimer 定时器在执行,将会影响到主线程的执行,将会让主线程诡异忙碌。在遇到没有任何的交互时,此时出现的主线程卡的问题,可以优先尝试了解是否 DispatcherTime 定时器的问题。即可了解当前主线程有多少个 DispatcherTime 定时器在运行。根据 Dispatcher.CurrentDispatcher 的定义,此 CurrentDispatcher 是 ThreadStatic 线程静态,因此以上调试断点必须落在主线程执行的代码。
2024-01-05 17:26:47
832
原创 WPF异常“调用线程无法访问此对象,因为另一个线程拥有该对象 ”
WPF中在对界面进行操作的时候,可能会遇到“调用线程无法访问此对象,因为另一个线程拥有该对象”异常,这是因为WPF中只有UI线程才能操作UI元素,非UI线程要访问UI时就会报异常了。Dispatcher.BeginInvoke()与Invoke()方法。BeginInvoke()异步执行,不等待委托结束就更新,Invoke()同步执行,需等待委托执行完。如:textBox.Text="";
2024-01-04 18:20:55
757
原创 C++垃圾回收机制
事实上,当微软发明了可以在CLR(.NET运行时)下运行的C ++方言时,他们必须为“C#风格的引用”(例如Foo^)发明新的语法,以将它们与“C ++风格的引用” (例如Foo&)。不幸的是,没有银弹,但熟悉不同的选择将有助于你选择正确的那个你正在试图建立的任何程序。这种方法有优点和缺点:好处在于,支持GC的语言的堆分配与不支持GC的语言的堆栈分配一样快,缺点是在销毁之前需要执行清理的对象需要一个单独的机制(例如C#的using关键字),否则他们的清理代码将不确定地运行。语言趋于同质化,语言趋于插件化。
2024-01-03 16:49:31
776
原创 C#事件中sender和e参数的理解
EventArgs是事件参数,比如说你用鼠标点击窗体,那么EventArgs是会包含点击的位置等等,它用来辅助你处理事件。sender是事件源,表示触发事件的那个组件,比如说你按下按钮,那么sender就是按钮。
2024-01-03 14:43:02
1220
原创 比特(位bit),字节(Byte),进制(二进制,十六进制)的关系
在编程深入底层一定会探究内存布局,变量以及对象在内存中的占用情况。比如一个int类型占用空间是多大,double占用又是多大。一个变量在内存布局总分配多少内存?一片内存能装下几个二进制位,几个十六进制位。想要探究这些就要彻底搞清:比特(位bit),字节(Byte),进制(二进制,十六进制)的联系和区别。
2023-12-08 14:45:05
4222
原创 位(bit)、字节(byte)、字符、编码
在计算机发明的时候,由于计算机只能表示二进制的数据,美国为了交流通信方便,约定了一个编码系统,就是ASCII码,把abc…对应,发现差不多刚好128个数,半个字节的长度,为了防止以后需要为新的符号编码,于是干脆取一个字节,最高位置为0,后七位从0-127分别对每一个符号编码。utf-16是用两个字节来编码所有的字符,utf-32则选择用4个字节来编码。gbk编码规定,计算机不能在每次都只读一个字节那么死板了,要先看看第一位是不是为0,要是为0的话,就当作ASCII码来读入一个字节,不然的话就读入两个字节。
2023-12-08 10:50:24
1883
原创 计算机存储结构分析(寄存器,内存,缓存,硬盘)
寄存器、高速缓存、内存、硬盘、光盘等,为啥有这么多种存储方式,对于不太了解的人,总是觉得云里雾里的,搞不明白原因。计算机主要的功能就是运算(cpu),但是要完成一个任务,就要读取运算指令,并将结果输出给用户;因此,指令的存储、运算过程中中间状态的存储、结果的保存等都需要存储器。第一代计算机,接收指令是通过读取穿孔卡片来实现的,这个穿孔卡片就可以理解为最老的用来存储命令的存储器。理想状态下,存储器的执行速度应该快过计算机的运算速度,这样才可以最大化的利用cpu的计算能力。
2023-12-08 10:06:13
1340
原创 寄存器、缓存、内存、硬盘、存储器的理解
缓存其实是内存中高速缓存(cache),它之所以存在,是因为当cpu要频繁访问内存中的一些数据时,如果每次都从内存中去读,花费的时间会更多,因此在寄存器和内存之间有了缓存,把cpu要频繁访问的一些数据存储在缓冲中,这样效率就会更高,但需要注意的是,缓冲的大小也是很小的,不能存放大量的数据,并且缓存中存放的数据会因为cpu的访问而被替代,必须某个数据开始被cpu频繁访问,但后来不再频繁,那这个数据的空间会被其他访问频繁的数据所占据(那些数据会被暂时存储在缓存中是算法问题)。cpu访问寄存器的速度是最快的。
2023-12-08 09:30:27
988
原创 C#里面的泛型(T),泛型类,泛型方法,泛型接口等简单解释
这个时候,TClass这个类就是泛型类,而它的构造方法,则和普通的类的构造方法的写法是一样的。当你要实例化这个类型的时候,必须告诉这个类型T代表哪个类型,之后,所有这个类里面被标识了T的地方,都是指你开始实例化指明的类型。这样我们不难理解,T这个东西的作用,其实就是一个通用的容器,制造它的人开始不指定它是用来装什么的,而使用者在使用它的时候要告诉这个容器准备用来装什么,容器知道了用来装什么之后,后面所有存入操作,它都要检查一下你放的东西是不是开始指定的东西类型。如果只写一个重载方法,则可以写成。
2023-12-07 10:13:00
1606
原创 C#线程 ConcurrentQueue安全队列介绍
Net Farmework中的普通队列Queue的实现使用了第一种方式,缺点是当队列空间不足会进行扩容,扩容的主要实现是开辟一个原始长度2倍的新数组,然后将原始数组里面的数据复制到新数组中,所以当扩容时就会产生不小的内存开销,在并发的环境中对性能的影响不可小视。当然在调用Queue的构造函数时可以指定默认空间的大小,但是一般情况下数据量是不可预测的,选大了会照成空间浪费,选小了会有复制内存的开销,而且队列扩容以后需要显示调用TrimToSize()方法才能回收掉不使用的内存空间。1.使用数组实现队列。
2023-11-22 17:50:14
3306
原创 吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
并发用户数是指系统可以同时承载的正常使用系统功能的用户的数量。需要指出的是,响应时间的绝对值并不能直接反映软件的性能的高低,软件性能的高低实际上取决于用户对该响应时间的接受程度。每个请求至少都有一次查询数据库的操作,多的需要查询3~5次以上,我们假设按照3次来计算,那么每秒会对数据库形成54000个请求,假设一台数据库服务器每秒支撑10000个请求(影响数据库的请求数量有很多因素,比如数据库表的数据量、数据库服务器本身的系统性能、查询语句的复杂度),那么需要6台数据库服务器才能支撑每秒10000个请求。
2023-11-22 16:24:51
1524
原创 url最大长度
7,Microsoft Internet Information Server(IIS)服务器能接受最大url的长度为16,384个字符。2,Firefox浏览器URL的长度限制为65,536(64k)个字符。3,Safari 浏览器URL最大长度限制为 80,000个字符。4,Opera 浏览器URL最大长度限制为190,000个字符。6,Apache 服务器能接受最大url长度为8,192个字符。1,IE浏览器对URL的最大限制为2083(2k)个字符。
2023-11-22 10:38:22
3345
原创 寄存器、缓存、内存之间的关系和区别
PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,现在已经不可能使用了,而EPROM是通过紫外光的照射擦除原先的程序,是一种通用的存储器。,它是为读取二级缓存后未命中的数据设计的一种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率,从某种意义上说,预取效率的提高,大大降低了生产成本却提供了非常接近理想状态的性能。按与CPU远近来分,离得最近的是寄存器,然后缓存,最后内存。
2023-11-22 09:39:19
2861
原创 【浅谈】计算机存储 寄存器,高速缓存,内存和硬盘 栈区,堆区和静态区
像用普通int定义的a和b都是变量,无论是全局变量还是局部变量,都是要放在内存中的,用“register”修饰后的b,可以建议将b的数据1放到寄存器中,但运行的时候,系统会自动判定,至于放不放到寄存器中,还要看系统人老人家怎么看啦~~硬盘是用来做内存扩充的,像我们平常下载的游戏,缓存的资源,都是放在硬盘上,所以硬盘上的空间要明显更大一点,但是想要使用硬盘上的数据时,要将硬盘数据拿到内存中。虽然test运行了七次,但是每次进入后,a加1,同时出作用域,a的数据销毁,再次进入,a的初始数据,还是3。
2023-11-21 10:43:38
189
原创 DispatcherSynchronizationContext and Dispatcher
如果在非UI线程调Dispather.CurrentDispatcher(), 然后dispatcher.BeginInvoke(),什么都不会发生,没有异常,没有警告。调Dispatcher.CurrentDispatcher时,如果当前线程没有dispather,会创建一个。提供一个自由线程的同步上下文,一个常用的用法是把UI线程的同步上下文保存起来,传给另一个线程,因为UI只能再UI线程中操作,在另外一个线程,用SynchronizationContext把操作跳转到UI线程。
2023-11-17 09:50:55
241
原创 redis基础知识:数据结构SDS
https://blog.csdn.net/weixin_37598243/article/details/127896092
2023-11-16 11:11:14
137
原创 c# 字符串格式化日期时间
/2017/04/01 星期六 下午 01:16。原文链接:https://blog.csdn.net/yugui/article/details/120009896。
2023-09-19 09:48:10
4436
Visual SVN工具插件
2017-09-12
AnkhSvn-2.5.12266.rar
2014-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人