上一页 1 ··· 6 7 8 9 10 11 下一页

2010年12月6日

CLR via C# 读书笔记 5-2 为什么不使用Finalize

摘要: 1.在创建对象的时候,Finalize需要更多的时间, 因为需要把对象放到Finalization List 中2.Finalize会让你的应用程序运行的更慢,因为在GC的时候需要对每个对象执行额外的检查3.Finalize会对内存造成更大的压力(Heap的内存分配问题)4.Finalize执行时间是不确定的,如果是使用需要独占的资源例如File, 那么下一个想使用文件的人无法确定什么时候才能使用它所需要的文件, 这种情况还是尽快使用Dispose或者Close释放资源比较好,这同时意味着,你无法手动控制Finalize的执行和它的执行顺序PS:什么时候执行Finalize1.托管堆中0代 阅读全文

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

CLR via C# 读书笔记 5-1 何时对托管资源使用Finalize

摘要: Finalize方法常用于回收非托管资源,以防止资源泄露在较少的情况下它也会被用于托管资源1.构造函数中如果抛出异常, 那么只有Finalize方法才会被执行,在这里可以回收一些已经分配的资源(Dispose不会被执行!!!)当然:Finalize方法的执行时间还是下一次GC的时候(依然不确定时间)如果不实现该方法将会造成资源泄露以下代码演示了在这种情况代码所以一般情况下为了完全避免资源泄露例如Memory leak, 通常将类实现为以下的方式代码 阅读全文

posted @ 2010-12-06 11:37 听说读写 阅读(447) 评论(0) 推荐(0) 编辑

2010年12月2日

.net 4.0 同步集合类 System.Collections.Concurrent

摘要: .net 4.0 位于System.Collections.Concurrent 命名空间下增加了一些同步的集合类顾名思义就是线程安全的集合类他包括ConcurrentStack, ConcurrentQueue, and ConcurrentBag等1.内部使用InterLocked实现同步功能2.在使用foreach 遍历这些集合的时候(GetEnumerator) ,这些集合内部会创建一个快... 阅读全文

posted @ 2010-12-02 17:27 听说读写 阅读(593) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 4-2 线程和锁的一些使用原则

摘要: 1.如果可以,尽可能使用线程池中的线程, 因为自己创建,维护销毁一个线程会极大的消耗CPU和内存资源,如果需要定时工作,那么请使用System.Threading.Timer2.在读多写少的情况,使用读写锁ReaderWriterLockSlim (不要使用ReaderWriterLock), 因为这样读操作之间不会互斥3.尽量不要使用递归的锁 ,当然Moniter是个例外,他虽然使用了递归, 但... 阅读全文

posted @ 2010-12-02 10:58 听说读写 阅读(471) 评论(0) 推荐(0) 编辑

2010年12月1日

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

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

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

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

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

posted @ 2010-12-01 13:01 听说读写 阅读(1179) 评论(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) 编辑

2010年11月30日

net异步操作总结和比较

摘要: 以下是个人理解:Compute 主要指的是CPU密集型或者是其他计算密集型的操作I/O 这里指的是操作文件或者网络等适用的异步情况父子依赖指的是 一个任务是不是依赖于其他任务的状态而执行(例如A任务完成取消或者异常的时候 B任务执行)取消: 一个任务开始以后是否能够被终止等待:能否block住当前线程以等待异步操作的完成(是否有内置功能支持)超时:能否对异步任务设置超时时间返回值和异常:能否处理异步任务的返回值和异常(是否有内置功能支持)异步方式主要应用Emulate Secondaryvia What?父子依赖关系进度报告取消等待超时返回值和异常QueueUserWorkItemComput 阅读全文

posted @ 2010-11-30 13:51 听说读写 阅读(647) 评论(0) 推荐(0) 编辑

CLR via C# 读书笔记 3-6 比较APM和EAP(异步编程模型和基于事件的编程模式)

摘要: APM: The Asynchronous Programming Model (异步编程模型) BeginXXXEAP: The Event-Base Asynchronous Pattern (基于事件的编程模式) Button.Click+=........EPM: The Event-Base Programming Model 1.本质上EAP内部也是使用了APM,只是EAP做了一些封装... 阅读全文

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

2010年11月25日

CLR via C# 读书笔记 2-3 Cache Lines and False Sharing(高速缓冲区和错误共享???)

摘要: 因为水平有限 不知道怎么用中文表达Cache Lines 和 False Sharing (暂时把他们翻译为 高速缓冲区和错误共享,如有谬误,还请有识之士指正)现在的cpu 一般拥有多个核心和一个cpu内的缓存(一般是L2?)这些缓存一般位于cpu芯片内, 他的速度远远高于主板上的内存,一般来说cpu会把数据从内存加载到缓存中 ,这样可以获得更好的性能(特别是频繁使用的数据)这个高速缓存默认划分... 阅读全文

posted @ 2010-11-25 12:10 听说读写 阅读(1468) 评论(1) 推荐(1) 编辑

2010年11月24日

CLR via C# 读书笔记 2-2 编译器优化导致的问题 - Timer

摘要: DotNet项目在Debug 和Release 模式一个主要的差别就是有没有打开编译器优化在Release下由于采用了编辑器优化,那么原来有些运行正常的代码就会出问题下列代码, 系统觉得Timer已经没有用了...所以就被回收了..所以在Release模式下 timer只会执行一次 (注意如果是Debug模式那么一直运行)(注意如果使用Visual Studio的调试器, vs会帮你延长临时变量的... 阅读全文

posted @ 2010-11-24 14:50 听说读写 阅读(416) 评论(1) 推荐(1) 编辑

CLR via C# 读书笔记 3-5 .net framework4.0 新增类 Task(一种很好的异步模型)

摘要: Task 是在.net framework 4.0中提供的新功能主要用于异步操作的控制在很多时候他比Thread和ThreadPool提供更为强大的功能,并且更方便使用1.demo以下代码是使用Task的一个demo代码Sum是一个声明好的外部函数, 当然我们也可以使用lambda来替代它这几句代码声明了一个Task 并且调用Start方法启动他,然后使用Wait方法等待这个异步任务的完成2.Ta... 阅读全文

posted @ 2010-11-24 14:16 听说读写 阅读(2766) 评论(0) 推荐(0) 编辑

2010年11月23日

CLR via C# 读书笔记 3-4 锁-条件变量模式

摘要: 条件变量模式(The Condition variable Pattern)指的是一个任务在等待一个变量的状态.(例如一个线程当变量为true的时候执行,否则就一直在休眠状态)以下代码演示了Thread1 一直在等待m_condition的状态Thread1在等待状态改变的过程中,间歇性的暂时释放锁的控制权这样Thread2就有机会获得到锁,改变m_condition的状态,并且执行Pulse(A... 阅读全文

posted @ 2010-11-23 18:06 听说读写 阅读(1878) 评论(0) 推荐(0) 编辑

2010年11月19日

CLR via C# 读书笔记 3-3 Thread.Sleep -1 0 1 和其他

摘要: Thread.Sleep(-1)通知系统不要调度该线程,事实上这个方法没什么用,因为它让线程一直活着又什么都不做,建议是直接终结了现场Thread.Sleep(0)告诉系统当前线程不需要剩下的时间片了,请系统去调度其他的线程但是系统经过计划以后有可能还是觉得当前线程比较重要,又继续执行当前线程这取决于优先级,如果其他优先级都比当前优先级低的话,那么当前线程会继续Thread.Sleep(1)强制上... 阅读全文

posted @ 2010-11-19 17:20 听说读写 阅读(947) 评论(0) 推荐(0) 编辑

C# 使用lock关键字lock不同的对象

摘要: c# lock关键字的本质是调用Monitor.Enter(object obj)并且在finally的时候调用Monitor.Exit(obj)在obj是不同数据类型的时候会出现不同的情况1.锁定类型 例如lock(typeof(int)) lock(typeof(ClassA)) // CalssA 是一个类的定义  备注:前者作用范围跨AppDomain 不跨Process, 后者不跨App... 阅读全文

posted @ 2010-11-19 16:02 听说读写 阅读(7031) 评论(0) 推荐(2) 编辑

上一页 1 ··· 6 7 8 9 10 11 下一页

导航