2010年12月1日

别拿Thread当定时器使用...

摘要: 经常可以看到很多程序使用Thread当作定时器(Timer)使用,例如定时检查数据,定时清空缓存什么的就像以下代码代码可能有的朋友已经注意到,在压力比较大的Asp.net网站中这个Thread经常不能正常的工作,也许这个线程会永远不会再起来.......那么定时任务也就泡汤了PS:如果是console的主线程 (标记了STAThreadAttribute ) 则可以正常的苏醒和睡眠另外一个原因就是每个Thread都是很昂贵的,能不用就不用,(我的另外一个文章有提到,一个线程至少1m内存还要考虑给GC 和上下文调度造成的压力)一般情况下建议使用System.Threading.Timer 来执行 阅读全文

posted @ 2010-12-01 16:28 听说读写 阅读(4211) 评论(1) 推荐(0) 编辑

C#的值类型内存分配总是和上下文有关,而不总是在堆栈上

摘要: 总是很常见到一些说法是值类型总是分配在堆栈上,引用类型总是分配在堆上(google搜索大约10万条记录- -)最近仔细思考了一下发现有点问题....当然我个人水平有限, 有什么差错还请大家指正个人总结的c#值类型和应用类型的分配应该是:  应用类型肯定在托管堆上,值类型总是和上下文有关1.类的实例成员, 类是引用类型,总是分配在堆上,那么a的内存就在ClassA的实例的内存里,也必然在堆上[代码]... 阅读全文

posted @ 2010-12-01 13:01 听说读写 阅读(1174) 评论(2) 推荐(0) 编辑

CLR via C# 读书笔记 4-1 线程同步-常见的锁,原生用户模式和核心模式 (上)

摘要: 本文主要描述为了保证线程同步和数据安全采用的若干种不同方案以锁为例:1.用户模式(User-Mode)比核心模式(Kernel-Mode)快很多2.windows操作系统无法发现用户模式的锁 (即使已经被Blocked了) ,所以线程池也不会为此新建一个线程处理新的请求3.核心模式的锁可以使得线程停止运行, 这样就不会浪费CPU,只是浪费内存(条件满足的时候,windows会唤醒之前休眠的线程继续... 阅读全文

posted @ 2010-12-01 11:30 听说读写 阅读(418) 评论(0) 推荐(0) 编辑

导航