学习体会20060416
自从硬盘Down掉之后,就一直在痛心疾首。很多不良的习惯要改善。笔记的整理就是一部分。在做项目和看书时,总是东一个文档西一个文档的做笔记。缺少一个整理,反馈阶段。就缺少了笔记的实际价值。从现在开始要定期的整理笔记。做为再思考的过程。
System.IO:
.Net中对文件的处理都包含在这个名字空间中。其中,对相对路径的处理很有意思。比如:可执行文件在D:\Test下。如果用相对路径\Test.txt。则得到的实际路径是D:\Test.txt。如果用相对路径Test.txt。则得到的路径是D:\Test\Test.txt。
异常处理:
觉得自己一直在误用try…catch…finally语句。如果是面向底层类库的开发。需要做的是尽量的预测可能产生的错误类型,抛出更为具体的异常类型,并对产生异常的情况做挽救。并为表层开发提供最为有效的信息。而不要抛出Exception这样没有价值的异常。而表层程序。需要对所有的异常做处理,并对相应的情况做挽救。
以前想把本地化这样的模块整合在底层类库。现在看来是个很失败的设计。类库是面向表层开发的。而本地化是面向用户的。应该在表层做处理。一个人做东西做多了。失去了面向类库开发的概念。以后一定要加强这种层次感。
多线程:
刚开始学习。简单的对效率进行了一个比较。做了个Demo。用单线程和多线程分别实现动态显示一个大运算量运算的结果。实践表明。在单线程下,结果无法动态显示。任何其他操作没有响应。在多线程下,结果动态显示。及时响应任何其他操作。但实现的速度慢于单线程。其他操作越多,时间越长。这个结果在意料之中。用多线程,就要在性能和交互性上做个权衡。
虽然学了操作系统,但潜意识里对线程有误解。企图用多线程来解决后台程序的空间问题是不现实的。线程是CPU执行的单位,而不是资源分配的单位。如果有一个开机启动的后台程序。要与主程序分开。然后动态的创建主进程。这样才能节约内存。
GC:
好好学习了一下.Net中的垃圾回收机制。利用后台进程的管理确实有损性能。但对于ASP.Net这样立即创建立即注销的东西的性能提升却是显而易见的。手工控制GC的方法不多。但适当的控制可以带来很大的性能提升。要进一步了解C++的内存分配机制。为平台选择打好基础。
MFC:
对MFC下的编程越来越充满疑惑。面向对象与传统的面向API混合的太厉害了。很多处理至少从统一性和简单性上来说,太差了。要进一步了解面向API能为性能带来多大的提升。现在觉得,很多问题,编译器都可以很好的解决。现在理解,如果不是对内存控制或是大量的系统消息处理有特别要求。用FCL和用MFC的性能差别在于二者的编译执行机制本身,而不是所用函数上。至于空间上,还没有太多的认识。
面向接口:
对编程要面向接口有了进一步的认识。如果一个对象如果只要用到它接口(包括基类)上的功能,一定要用接口来定义它。如果和外界有交流的比如是参数,或是返回值。这样处理,可以增加函数的复用性和扩展性。所有用到此接口的类都可以利用此函数,而不必是特定的类。如果是用在程序内部,至少可以节约空间(好像说法有问题,要考究)。这要求,对使用的每个类都要有更好的了解。但这种思想以后一定要应用起来。