- 博客(11)
- 资源 (67)
- 收藏
- 关注
原创 SpinWait的性能高于Thread.Sleep
在进行多线程开发时,我们经常会用到Thread.Sleep(timeout_ms)来等待或者腾出时间来让其他线程处理。不过,即使我们把timeout_ms设置为0,Thread.Sleep还是会执行等待操作。这就让人很纳闷了,我明明指定的等待时间是0毫秒,为什么还会执行等待呢?这时因为当我们调用Thread.Sleep时,是让内核暂停处理当前的线程,然后再看需要等待多久,当发现等待时间是tim
2013-11-27 13:03:50 25911 6
原创 用线程安全随机数解决Random在多线程中随机性重复的问题
在.NET中,随机数一般是用Random来获取,但是当在多任务的并行化编程时,问题就出现了。因为Random是基于时间作为种子来生成伪随机数的,而如果程序在多核并行时,在同一时间内的多个核中取到的时间是一样的,这样一来,生成的伪随机数就有可能会有一样的。如果业务需求中需要不可重复的随机数,那么这后果将会相当严重,所以必须采取一种新的方式来获取线程安全的伪随机数。下面是摘自《.NET Paralle
2013-11-27 10:36:54 10636
原创 VS2012并发可视化工具启动异常(当前正在进行ETW收集)
在调出VS2012的并发可视化时,弹出异常"Concurrentcy Visualizer无法启动,因为当前正在进行ETW收集",如下图后来查找资料,查了很久,终于在《收集 Windows 事件跟踪 (ETW) 数据》一文中找到线索。按照文中的说法,需要在性能管理器中右击性能会话,然后点开属性进行相应的设置,可是并发可视化工具在开启进直接异常了,这又怎么会有会话呢?既然直路走不通,
2013-11-26 16:26:28 3365
原创 用TaskScheduler代替invoke和begininvoke异步更新那界面数据
在异步编程时,为了更新界面的数据,经常会用invoke和begininvoke来操作。而这两个方法又必须是基于控件的,所以为了能够调用还必须传一个控件进去。而在基于任务编程时,可以使用TaskScheduler来直接更新数据。下面是代码using System;using System.Collections.Generic;using System.ComponentModel;usi
2013-11-26 10:25:44 1953
原创 超线程将物理内核提升至更多的逻辑内核
现在电脑大多数是多核的,比如我的电脑是宏基的,下面是驱动精灵硬件检测的结果。我们可以看到,硬件概要中显示CPU是双核的,现在我们再看看CPU(处理器)的具体信息。同样是使用驱动精灵检测结果。这时我们会看到,核心/线程部分显示的是双核、四线程。那么这里的四线程又是什么意思呢?我们再看看任务管理器中性能选项的情况,见下图我们看到在CPU使用记录一项,显示出了四个块,
2013-11-23 09:13:06 4207
原创 并行化时要注意的线程安全与任务安全
在串行编程时,操作都是按顺序执行的,比如数字从1到100000递增,就必然的是1、2、3、4……100000。代码如下for (int i = 1; i <= 100000; i++) { Console.WriteLine(i); }然而,在并行化编程时,因为是并行运行的,所以执行顺序会与系
2013-11-22 15:20:57 2233
原创 .NET4.0的并行调试窗(Parallel Tasks)如何调出
.NET4.0增加了并行处理功能,在进行并行调试时,需要调出并行调试窗进行跟踪查看,可是按照>一书中说的Debug-Windows->Parallel Tasks,根本没有找到并行调试窗,如下图。这是为什么呢?看着>一书中明明是可以调用的,思考了一会儿之后,想着会不会是要在运行中调出的。于是设了两个断点,然后在运行中按Debug->Windows->Parallel Tasks,得到了
2013-11-20 10:35:31 2135
原创 dynamic和匿名对象
有时需要使用匿名对象存储数据,而有时需要使用dynamic去提取数据,这里写了一个简单的示例,代码如下static void Main(string[] args) { List datas = new List(); for (int index = 0; index < 1000; index++) {
2013-11-18 17:57:42 2510
原创 Environment.CurrentDirectory引起的BUG
今天在运行一个项目时,提示“配置文件不存在”,经查是源于一个配置文件的路径不正确。可是程序在本地运行OK的,为什么在客户电脑上运行就不OK了?想来想去只能是Environment.CurrentDirectory这个取路径的方式不对,然后换成了Application.StartupPath程序正常了。解决完问题后,回过头来思考,本地运行和客户电脑上运行唯一的差别就是系统上,本地是WIN7
2013-11-12 18:17:52 3184 1
原创 一个失误引发的奇怪线程BUG
今天客户反应之前做的一个项目中,有一个功能时能时不能,于是按照描述,在自己电脑上进行了相应的测试,可是发现问题难以重现。后来按着客户的环境开了个虚拟机(XP SP3)进行配置,问题重现了。可是在自己电脑上(WIN7 64)却不会出现。难道是系统引发的问题?可是依据项目以前的案例,在XP上运行是OK的。那这是什么原因?思来想去,只得打开代码,挨个查找,最后把可能的地方都一一作了调整,并输出日志,
2013-11-04 17:53:42 970
原创 64位引用32位导致“未能加载文件或程序集或它的某一个依赖项”的异常
今天在合并项目时,出现了总是提示“未能加载文件或程序集或它的某一个依赖项”的异常,反复检查了几遍所引用的程序集,并没有哪个依赖项没有加载,而且看生成的文件,程序集也已经生成了,但是一调用的时候就异常。网上搜了很多资料,基本上都说是引用的问题,可是试了之后根本解决不了问题。后来,忽然想到,所引用的项目中引用了一个32位下的C++的DLL,为了兼容这个DLL,项目使用了32位的目标平台进行
2013-11-04 11:43:37 2569
AspNetVueElementUI.zip(含图标扩展)
2019-05-10
AspNetVueElementUI(含组件注册)
2019-05-10
AspNetVueElementUI
2019-05-06
WinForm内嵌Unity3D并实现交互
2015-11-17
WinForm嵌入Unity3D并实现交互
2015-11-17
json转换c#实体类
2015-01-14
NDK开发的简单实例(JNI及Android的C组件实现)
2014-03-24
Android之动态库生成并打包到APK中(Windows下)
2014-03-19
Ant脚本打包Android程序的demo 多渠道及第三方JAR打包
2014-03-17
Ant脚本打包Android程序的demo(含打包第三方jar)
2014-03-14
Linux下以C构建WEB服务同时响应XHR(XMLHttpRequest)请求
2014-01-28
CCI所需的libz3.dll、Microsoft.Z3.dll、Microsoft.Z3V3.dll等的DLL安装包
2014-01-23
C#的COM事件在C++和JAVA中触发和响应的实现
2013-12-13
.NET4利用MemoryMappedFile实现跨进程多个可执行程序之间的通信
2013-11-13
谷歌插件开发实例(CSDN快速登陆)
2013-10-29
VM清理工具
2013-09-14
C#开发Android应用实践(英文版)
2013-08-07
C#HTTP代理的实现之注册表实现
2013-07-29
C#开发的Telnet模拟工具(基于SOCKET通信,可以直接按SMTP/POP3/IMAP通信协议操作)
2013-07-25
HTML5摄像头播放视频和截图
2013-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人