08 2013 档案

摘要:这只是一些代码片段,由于Wiz开发的资料实在不多,而且内容都不够新。 这里的代码主要参考Tools.Timer这个插件,但是由于内部实现的很多变化,Tools.Timer这个插件基本上已经无法使用了。 定时器的注册与删除 使用定时器,是需要注册的。注册一个每60000毫秒(1分钟)触发一次Timer 阅读全文
posted @ 2013-08-11 11:22 atskyline 阅读(425) 评论(0) 推荐(0)
摘要:这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类。但是出于完整性,还是将一下怎么使用.NET4的并行扩展,也就是一直在使用Task模型来处理异步问题。有一个特别好处是,当有大量并发的IO操作时会有更好的效果。大量并发的IO操作的含义是类似如下private List> tasks;有一堆... 阅读全文
posted @ 2013-08-08 23:07 atskyline 阅读(791) 评论(0) 推荐(0)
摘要:主要的几个概念(详细最好还是看书,配合插图看)任务是会被分配到线程上的,而这些线程都在线程池引擎下管理线程池引擎管理着合适数量的线程池,线程从全局队列获取工作项执行。.NET4 Framework 4改进了全局队列的加入和退出算法,使用了无锁的方式。通常还是建议使用包装后的Task,但是也是可以直接为ThreadPool加入工作项的,参考代码如下ThreadPool.QueueUserWorkItem((state) =>{//...}, param);其中param是一个Object,用于传入参数。而在callback中以state使用。使用ThreadPool.QueueUserWo 阅读全文
posted @ 2013-08-07 23:27 atskyline 阅读(582) 评论(0) 推荐(0)
摘要:没有什么好说的,主要是将调试模式下的Parallel Tasks窗体和Parallel Stacks窗体。折腾一下应该比看书效果好。(表示自己没有折腾过)另外值得注意的是,主线程不是一个任务。所以主线程不会出现在任务列表或任务图中。来自为知笔记(Wiz) 阅读全文
posted @ 2013-08-05 22:22 atskyline 阅读(471) 评论(0) 推荐(0)
摘要:PLINQ这个话题好多书都写到过,这本也没有什么特别好的地方。几个有用和有趣的点记录一下。顺序的不确定性用PLINQ就一定要记住并行后会导致顺序不确定的问题。解决方案就是AsOrdered或者orderby子句。var keysWith10Letters = from key in Keys.AsParallel().AsOrdered()where (CountLetters(key) >= 10)&& (key.Contains('A'))&& (key.Contains('F'))&& (key.Con 阅读全文
posted @ 2013-08-04 20:09 atskyline 阅读(496) 评论(0) 推荐(0)
摘要:本章介绍了一些轻量级的同步原语,其中有很大部分是.NET Framework 4才引入的。System.Threading.Barrier用于一段程序分成多个阶段,每个阶段的开始都需要之前的阶段完成。如果这段程序需要并行化。可以在每段之间采用Barrier。还可以设置在每个阶段之间的动作。task在Barrier中成为参与者(participant),在构造的时候要设定数量,也可以动态的增删。异常和超时的处理可以参考代码。相比于使用使用Task的ContinueWith方法实现多个阶段的串行,Barrier可以减少非常多的Task数量。用完后需要DisposeTask[] _tasks;Bar 阅读全文
posted @ 2013-08-04 16:56 atskyline 阅读(745) 评论(0) 推荐(0)
摘要:这一章主要介绍了System.Collections.Concurrent下的几个类。ConcurrentQueue并发队列。完全无锁,使用CAS(compare-and-swap)比较并交换和自旋重试来实现线程安全。//加入队尾public void Enqueue(T item)//尝试删除队头,并将元素通过out返回,返回值表示是否操作成功public bool TryDequeue(out T result)//尝试获取队头,通过out返回元素,返回值为代表是否操作成功public bool TryPeek(out T result)ConcurrentStack并发栈,完全无锁,使用 阅读全文
posted @ 2013-08-03 16:22 atskyline 阅读(4762) 评论(0) 推荐(0)
摘要:Task的使用var t1 = new Task(() => GenerateAESKeys());var t2 = new Task(() => GenerateMD5Hashes());// Start the taskst1.Start();t2.Start();// Wait for all the tasks to finishTask.WaitAll(t1, t2);等待超时// Wait for all the tasks to finish with a 1 second timeoutif (!Task.WaitAll(new Task[] { t1, t2 }, 阅读全文
posted @ 2013-08-03 12:54 atskyline 阅读(825) 评论(0) 推荐(0)
摘要:Parallel.Invoke并行执行多个方法,只有在所有方法都执行后才会返回static void Main(string[] args){Parallel.Invoke(() => ConvertEllipses(),() => ConvertRectangles(),() => ConvertLines(),() => ConvertText());System.Console.ReadLine();}static void ConvertEllipses(){System.Console.WriteLine("Ellipses converted.&q 阅读全文
posted @ 2013-08-03 10:24 atskyline 阅读(2119) 评论(0) 推荐(1)
摘要:我喜欢把一天的日记都放在一个文件中,而不是每次都新建一个文件。写了一个脚本,检测当天是否已经新建日记,已经新建则打开,未新建则新建并打开。其中我不太喜欢Wiz日记本来的标题命名方式,所以都改成了形如2013-08-01。本来想做成可以每次只写新增加的部分。结果我无法读取和修改被加密过日记,所以暂时不能自动的增量添加。如果可以操作被加密的日记,就可以用一个HtmlDialog,来搜集新增加的内容,然... 阅读全文
posted @ 2013-08-01 12:47 atskyline 阅读(255) 评论(0) 推荐(0)
摘要:很多文章都说需要“ConvertToUTF8”和“GBK Encoding Support”连个插件。其实GBK Encoding Support完全不需要,而且会导致打开的文件名变得非常的奇怪。尽使用ConvertToUTF8就非常好了。来自为知笔记(Wiz) 阅读全文
posted @ 2013-08-01 09:19 atskyline 阅读(1335) 评论(0) 推荐(0)