随笔分类 -  C#

摘要:之前的博客 将时间作为GUID的方法 中,我使用了锁。我在实际的使用中,错将锁的释放放在了if语句中,这纯粹是我的失误,导致了很严重的错误。因此我在想是否有无锁的将时间作为GUID的方式,答案是使用Interlocked中的 CompareExchange方法,该方法是原子操作。说是无锁操作,其实就 阅读全文
posted @ 2018-09-09 15:23 JAZzzzzzzz 阅读(479) 评论(1) 推荐(0) 编辑
摘要:在C#中,系统提供了GUID类,用户可以通过该类来获得128位的唯一标识,但是该标识不具有可读性,很难把该GUID显示在界面上,以当前时间精确到毫秒来作为GUID是一个比较不错的做法,但是DateTime.now的误差是100ms左右,无法在毫秒级的并发情况下获得不同的时间。 在项目中,为了在界面上 阅读全文
posted @ 2018-07-21 12:41 JAZzzzzzzz 阅读(336) 评论(0) 推荐(0) 编辑
摘要:内存泄漏是指:当一块内存被分配后,被丢弃,没有任何实例指针指向这块内存, 并且这块内存不会被GC视为垃圾进行回收。这块内存会一直存在,直到程序退出。C#是托管型代码,其内存的分配和释放都是由CLR负责,当一块内存没有任何实例引用时,GC会负责将其回收。既然没有任何实例引用的内存会被GC回收,那么内存 阅读全文
posted @ 2018-03-27 14:46 JAZzzzzzzz 阅读(3147) 评论(26) 推荐(9) 编辑
摘要:一提到线程同步,就会提到锁,作为线程同步的手段之一,锁总是饱受质疑。一方面锁的使用很简单,只要在代码不想被重入的地方(多个线程同时执行的地方)加上锁,就可以保证无论何时,该段代码最多有一个线程在执行;另一方面,锁又不像它看起来那样简单,锁会造成很多问题:性能下降、死锁等。使用volatile关键字或 阅读全文
posted @ 2018-03-19 21:10 JAZzzzzzzz 阅读(1852) 评论(5) 推荐(3) 编辑
摘要:当你需要2个线程读写同一个数据时,就需要数据同步。线程同步的办法有:(1)原子操作;(2)锁。原子操作能够保证该操作在CPU内核中不会被“拆分”,锁能够保证只有一个线程访问该数据,其他线程在尝试获得有锁的数据时,会被拒绝,直到当前获得数据的线程将锁释放,其他线程才能够获得数据。 为什么要线程同步? 阅读全文
posted @ 2018-03-11 23:35 JAZzzzzzzz 阅读(1191) 评论(1) 推荐(2) 编辑
摘要:介绍了如何在Task结束后开启新的任务和如何取消一个Task。 阅读全文
posted @ 2018-03-08 11:48 JAZzzzzzzz 阅读(787) 评论(7) 推荐(2) 编辑
摘要:上一章我简单介绍了异步编程的基本方法,推荐使用的方式是Task。Task是对线程池的封装,并且可以对Task使用async和await关键字。这两个关键字的使用非常简单,那么这两个关键字究竟起什么作用?工作原理是怎样的?本文就来简单解释。 本系列是我读《CLR via C#》的总结,但是书中关于as 阅读全文
posted @ 2018-03-07 11:49 JAZzzzzzzz 阅读(1765) 评论(3) 推荐(2) 编辑
摘要:新开了一个多线程编程系列,该系列主要讲解C#中的多线程编程。 利用多线程的目的有2个: 一是防止UI线程被耗时的程序占用,导致界面卡顿;二是能够利用多核CPU的资源,提高运行效率。 我没有进行很深入的讲解,是以实际使用为主。我的这个系列主要是《CLR via C#》的总结,该书的作者Jeffrey 阅读全文
posted @ 2018-03-06 15:31 JAZzzzzzzz 阅读(1671) 评论(1) 推荐(1) 编辑

点击右上角即可分享
微信分享提示