(性能优化…我这一辈子都在做性能优化…)

1. 线程。不要啊不要自己做锁…并行计算首先要让被并行的任务尽量独立,然后只要把任务放进Thread扔出去,在主线程等待子线程完成任务就行了。
var thread = new Thread(worker.Execute);
thread.Start();
...
thread.Join();

2. 还是线程。然则,.NET的线程是昂贵的,据说一个线程启动需要100毫秒左右,还需要1M左右内存。所以,不能肆无忌惮地开线程…要用 BackgroundWorker …话说,为什么要设计出这种重量级的线程呢…

3. 容器。List不能赋值给IList,IList不能赋值给ICollection…设计这种傻逼容器框架的人真的会写程序吗?

4. 还是容器。List不是线程安全的,多个线程一边写一边读就会告诉你 InvalidOperation 因为内容被修改了;多个线程一起写就会告诉你 ArgumentError 因为某个线程可能以为容器空间够用而不去extend它直接往里放东西结果空间被另一个线程用掉了。好吧…可是,据说ArrayList是线程安全的…但多个线程一起写也会ArgumentError…

5. 日志。Log4Net很慢 …真的非常慢…所以只要把大量的log关掉,于是性能就好了…其实最大的优化是这个…

总之,感想是…真的有人用.NET这种东西做什么严肃的应用程序吗?这些东西…设计得也未免太弱智了吧…呃,想起来了,还有一个:

6. 还是日志。胡凯 说,做个小工具吧,统计一下日志里的信息…嗯,我觉得,那个工具应该叫 grep …一个连grep都没有的操作系统啊…

blog comments powered by Disqus