摘要: 众所周知:基本上所有的软件项目到后期必不可少的是fix bug,一个软件在交付客户后或交给测试人员测试时都存在一些程序员意想不到的问题。阅读全文
posted @ 2011-11-18 18:11 深邃的狮子座 阅读(62459) 评论(16) 编辑
  • 今天是2012年5月28日,我的职业生涯也满一年了。在工作闲暇之余,有一种想用文字记录下我的这些经历,以激励以后的我能以更积极的态度,更强大的心态来面对一切。
  • 总的来说,这个工作还算比较满意。虽然公司不大,刚成立,但是在这里我能学到很多东西。老板和上司也比较器重我,同事关系较融洽。
  • 在这一年里,我接触到以下一个方面的技术以及工作经验:
  • 1.较基础的理论知识:了解了这个行业的发展历史,前景,现状以及相关的专业知识。
  • 2.学习并实践了WCF技术:现在基本可以得心应手的使用WCF了。当然这中间经历了很多困惑以及艰难,但是都在同事的帮助以及自己的努力之下一一克服了。在学习的过程中,我发现,要快速上手一门技术并没有一开始你想象的那么难。
  • 3.了解了MVP,支持MVP的SCSF框架,Linq使用方法与技巧。这个自己没有查看过什么资料,完全是在leader的指导之下一步一步的领悟的。最后也只是知道一些皮毛,因为没有时间学习。
  • 4.了解并学习了一个专业绘图控件:学会了使用方法,使用技巧。虽然不能面面俱到,但至少在下次使用时会事半功倍。
  • 5.全面了解多线程的机制,原理以及使用时的注意事项。现在水平还一般,只能说略知一二。
  • 6.纠正了自己写代码的一些不规范的习惯。
  • 7.弄明白了什么样的代码是好代码。弄明白了以前模糊不清的概念。会用与用的恰到好处还有很长的一段路要走。
  • 8.最重要的一点:明白了自己和别人的差距在那里。进公司之前,一直觉得自己很牛,但是在发现自己犯下一次次的低级错误后,我发现了自己的不足:
  • a.基础知识不够扎实:连简单的对象,事件,接口,继承之间的关系都没有搞透彻,我的基础只是较片面;
  • b.遇到问题不能客观的看待:而是以“猜测”的心理去解读。有一种“这个事情已超出我的能力范围,我肯定搞不定”的心理在作怪。其实并没有我想象的那么难,只是自己走不出自己给自己设下的“圈套”。
  • c.不主动接受新技术:遇到问题知道解决方案了,但是往往因为需要学习新东西而放弃机会,进而用自己已经精通的方法去解决。这样做会让自己错过很多接触新知识,开拓视野的机会,以后要改正。
  • d.写代码急功近利:在没有看清楚全貌的时候就基于下手,最后逻辑越来越复杂,连自己都搞不清楚。这个一直依赖都是我的死穴,以后一定要改正。
  • e.思维逻辑过于跳跃,对复杂逻辑缺乏耐心:不想深入理解业务逻辑,缺乏分析不同系统直接逻辑关系的意识以及能力。
  • f.没有将上司布置的口头任务放在心上:上周或者昨天,上司在你不经意间说的一句话,很有可能就是你的新任务,虽然没有正式通知你该怎么做,但是你自己要即使领会其中含义。
  • g.言多必失,要三思而后行:不要给任何事物下结论,把下结论这事留给领导,我用数据解释现象即可。说话不要带:“可能”,“大概”,“也许”,“说不定”,“肯定”,“肯定不可能”这样的表达个人主观判断的词。
  • h.不能越界干活:该自己做的不要问别人,不该自己做的坚决不做,不知道是不是该自己做的问领导。
  • i.用面向对象的思想写代码:写代码除了要注意规范外,还要注意用面向对象的思维设计。不能单单从业务逻辑流程来设计代码架构。这个虽然是常识,但是在为了赶进度,往往忽略代码的可扩展性,而写出自己都觉得垃圾的代码。
  • 展望未来:
  • 1.努力改正自己的不足,时时反省自己,缩小差距;
  • 2.养成学习的好习惯,多多接触新的概念与思想,多与人交流。学习到好的思想与解决方案后要融会贯通,为我所用;
  • 3.多看书,不要将时间浪费在无聊的事情上;
posted @ 2012-05-28 15:20 深邃的狮子座 阅读(128) 评论(2) 编辑
摘要: 最近由于工作需要,对多线程进行了深入研究,也只能略知一二,尚不能融会贯通。如有不妥之处,还请大牛们不吝赐教。 本文不会详细列出各种多线程的例子和源代码。本文旨在给那些和我当初对多线程理不清头绪的人投石问路。 一、多线程原理: Windows是一个多任务的系统,当一个程序开始运行时,它就是一个进程,进程所指包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的,线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。阅读全文
posted @ 2012-05-20 21:28 深邃的狮子座 阅读(1632) 评论(5) 编辑
摘要: 前提: 什么是可扩展性良好的程序:在需求变更或需求增加时,不需要修改代码,而是增加代码的方式来适应需求的变化。 现假设需要拍一个电影的场景: 需要剧本(Screenplay),演员(Palyer),导演(Director)。 导演按照剧本的流程,挑选演员去完成拍戏工作。阅读全文
posted @ 2012-03-30 17:33 深邃的狮子座 阅读(380) 评论(4) 编辑
摘要: System.Double怎么了?阅读全文
posted @ 2012-02-14 18:05 深邃的狮子座 阅读(631) 评论(6) 编辑

一、场景:

需要将有一定格式的File里的内容读取到已经定义的类中,譬如一个二进制文件里的内容读取到一个新的DataStructure里面。

1. File不是很大,一次将所有内容Load到内存中,不会占用太多Memory;

2. 二进制文件无法直接反序列化成一个Object,需要一个映射才能完成转换.

二、为什么不用FileStream:

首先,我们来看一下FileStream的代码以及原理:

FileStream fs = new FileStream(binaryFilePath, FileMode.Open, FileAccess.Read);

Encoding enc = Encoding.ASCII;
using (BinaryReader br = new BinaryReader(fs,enc))
{

//

}

BinaryReader 提供了ReadInt16,ReadChar,ReadDouble,……但是每次Position.Seek都会去定位流的指针,所以会耗费一些时间。

但是如果我们一次性的将所有内容都独到内存(Memory)中,然后操作Memory是不是更快呢?

三、MemoryStream实现方法

FileStream fs = new FileStream(binaryFilePath, FileMode.Open, FileAccess.Read);
//Read all bytes into an array from the specified file.
int nBytes = (int)fs.Length;//计算流的长度
byte[] byteArray = new byte[nBytes];//初始化用于MemoryStream的Buffer
int nBytesRead = fs.Read(byteArray, 0, nBytes);//将File里的内容一次性的全部读到byteArray中去
using (MemoryStream br = new MemoryStream(byteArray))//初始化MemoryStream,并将Buffer指向FileStream的读取结果数组
{
/your code

}

四、性能分析

分别用以上两种方法Load File:1,2,3,4,5,6,将其Load的时间记录下来:

File File Size(Mb) FileStream(ms) MemoryStream(ms) Performance Enhancement
1 0.5 921 392 2.35
2 7.1 4454 1466 3.04
3 14 7848 3366 2.33
4 28 16025 6242 2.57
5 44 21196 9268 2.26
6 73 27533 14503 1.90

 

可以看出:应用了MemoryStream性能提高了2-3倍。

 

可以看出:随着File内容的增加,性能提高的就越来越缓慢,因为他占用了更多的内存空间,可以说是:“以空间换时间”。

转自:http://www.deepleo.com/archives/680

posted @ 2012-02-06 13:51 深邃的狮子座 阅读(479) 评论(2) 编辑
摘要: 虽然在公布Silverlight版本计划时已经有迹象表明Microsoft 有意不再将Silverlight作为公司的主要发展方向,但是我也不知道这个决定具体是什么时候下的。在2009年十一月推出Silverlight4时,公司还有意开发Silverlight 5,这点证明,Silverlight在2010年初还是公司的重要开发计划。今年推出的Visual Studio LightSwitch可以视为Silverlight的升级版,但是Silverlight 6似乎已经不在计划之内了。阅读全文
posted @ 2011-11-28 11:58 深邃的狮子座 阅读(247) 评论(2) 编辑
摘要: 众所周知:基本上所有的软件项目到后期必不可少的是fix bug,一个软件在交付客户后或交给测试人员测试时都存在一些程序员意想不到的问题。阅读全文
posted @ 2011-11-18 18:11 深邃的狮子座 阅读(62459) 评论(16) 编辑