关于.NET里面ContextSwitchDeadlock异常

问题背景

最近在做一个反应速度测试软件,是用C#写的,刚开始是觉得是个小工具,随便做做就可以了,结果是越做越复杂,本来打算一到两个星期就可以做完的,结果是做了两个月,当然这期间还有其他事情在做的。

问题出现

在软件中需要一个功能,就是随机生成一个长度为120的数字序列,要求是:

1.          每个数字都是1234这四个数中的一个;

2.          前后两个数不能重复;

3.          每个数(1234)各30个,一共120个。

我自己写了个算法,具体思路是这样的:循环120次,每次随机产生个数,然后判断这个数已经生成了多少次了,如果超过了30个或者跟前个数字重复,就重新随机产生。

进入调试之后,每次到循环这里,貌似都是循环到80次左右的时候就会出现ContextSwitchDeadlock异常,然而有时候又不会的。

郁闷一个星期

问题解决 阅读全文 »

Aug27

Mashup之我见

前段时间去参加了Dev2Dev的TechDays,这次TechDays的主题是企业Mashup。

在去参加会议之前,先到网上了解了一下什么是Mashup,因为从来没听说过嘛,可是Google了半天,没什么收获,介绍一般都是比较含糊,不是非常明白。而且还错误的认为Mashup可能是类似于AJAX的技术,准备用来跟AJAX,FLEX等技术进行竞争的,后来发现错的很离谱。

这次会议先是由BEA的两名技术顾问介绍Mashup的概念以及一些演示,然后还有BEA的合作伙伴Adobe的人介绍了FLEX。下面还是说说我在听完演讲之后对Mashup的认识吧。逻辑不是很清晰,只是想到什么写什么,毕竟已经比较长时间了。

Mashup简述

Mashup的定义:整合不同来源的内容以提供统一完整体验的Web站点或应用程序,已经成为了快速组装新的应用程序的一种趋势。这些应用程序被称为Mashup。从这个定义看来Mashup应该是一类应用程序,但很多情况下,我们都把它当作一个动词来用,类似于“组装”的意思。还有,我们可以从这个定义中提取出三个特征:整合不同来源的内容、统一完整的Web站点或应用程序、快速组装。其实Mashup并不是什么新的技术,它只是一个概念,从这个三个特征里面可以知道,只是将一些内容组装在一起。

Mashup演示 阅读全文 »

Jul24

MD5算法简述及ASP实现

MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。它是非对称的加密算法,即是不可逆的。

    MD5功能:

输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);

不同的输入得到的不同的结果(唯一性);

根据128位的输出结果不可能反推出输入的信息(不可逆);

MD5属不属于加密算法:

认为不属于的人是因为他们觉得不能从密文(散列值)反过来得到原文,即没有解密算法,所以这部分人认为MD5只能属于算法,不能称为加密算法;

认为属于的人是因为他们觉得经过MD5处理后看不到原文,即已经将原文加密,所以认为MD5属于加密算法;我个人支持后者。

MD5用途: 阅读全文 »

Jul24

关于密码管理器

最近比较空,所以花了点时间做了个密码管理器,因为本人经常上网,网上的帐号也比较多,密码记不住,所以写个小程序。

密码使用XML文件存储,占用空间小,所以平时只要把密码文件放在U盘里,需要的时候用程序打开看看就可以了,很方便。 阅读全文 »

May14

安装MSSQL2000时的问题

我以前装过MSSQL2005,现在由于工作需要要装2000的,结果装起来后总是连接不上,提示错误:

未能与(LOCAL)的连接。

原因:SQL   SERVER不存在或访问被拒绝   ConnectionOpen(Connect())。

请验证SQL   SERVER   是否运行并检查   SQL   SERVER   注册属性(通过右击(LOCAL)节点,然后重试。

经过两天的努力寻找,终于解决了问题, 阅读全文 »

Feb13

MFC访问ACCESS2003出现不可识别数据库的问题(static dll和shared dll)

这里不想讲静态链接和动态链接有什么区别,这个我觉得每个学计算机的人都应该知道,就跟常识一样。

为什么突然想到来写这个问题呢,主要是刚碰到一个问题,用CDaoRecordset访问ACCESS 2003 的数据库时候出现了“不可识别的数据库”问题,问题出在MFC DLL上,如果你需要访问Access 2003的数据库,你可以非常简单的在 CYourApp::InitInstance() 中加入 AfxGetModuleState()->m_dwVersion   =   0x0601;  这句,这样就可以访问了,但这种情况只适用于shared dll,因为这种方法实际上是在运行时动态改变DLL版本,所以当你的工程是采用static dll 时,这个方法就不对了,解决办法是:( VCPATH/ 代表VC安装目录下的VC98目录) 阅读全文 »

Jan07

基于WinRAR的WEB应用在线压缩文件组件

最近在做一个项目,是一个课程教学网站,需要涉及到一个功能,就是教师可以打包下载学生上传的文件,具体功能是,当用户点击一个链接后,可以将WEB服务器上指定的目录通过WinRAR压缩软件压缩成一个包,然后提供下载,我的设计思路很简单,就是使用VB开发一个控件(.dll) ,然后在页面上创建该空间,并调用其中的方法。下面介绍一下这个控件的开发及使用: 阅读全文 »

Dec20