学习体会20060504

早上没睡好,头痛了大半天。一到晚上,顿时精神了。看来我还是一个注定的夜行动物。前段时间太忙,体会不少,但笔记不多。努力回想,尽量的多写一些。

C++和VC++:
毕业设计是在MFC下做的。实践出真知。开始对C++有了多一些的了解。最不适应的是C++的非安全模式。New出来的数组,如果超出了界限,并不一定会报错。比如new int[10]。在使用int[11]访问时,返回一个乱其八糟的值。有一次,为了找出这个错误,调了足足半个小时。如果在托管模式下,最多半分钟就可以发现错误。个人觉得,这是C++很大的优势,可以用指针指来指去。但同时,在很多情况下弊大于利。难与调试,难于理解,有安全漏洞。
与托管相比。C++的指针会让编程麻烦很多。对堆的使用上,讲究new和delete匹配。很多时候总是让人顾此失彼。虽然积累一定经验后,很多东西可以避免。但,个人觉得,大部分时候,在托管平台下的开发的上手难度和代码书写难度都远远小于C++。而且,很多C++所谓的优势在很多应用项目中并显示不出来。如果要我对一个项目的平台进行选择。除了对底层有特别的操作,我更多会考虑托管的开发。

MFC:
MFC是个很奇怪的东西。至少我认为这样。很多时候像披着面向对象皮的框架。对很多东西的封装都很比健全。相比之下,.netframework才能更好的诱导人们使用面向对象的思想进行开发。我始终相信,在团队项目中,用面向对象的思想更容易组织,而不会出现一些乱七八糟的问题。

DataSet和DataReader:
这是.net下(ADO.net)下获取数据库数据的两种方式。工作原理的差别不想说了。只想写一些体会。前段做数据库比较的项目。原程序用的是DataSet来存放需要比较的内容,然后进行比较。我把它改为使用Dr一条一条比较。给我感觉是,如果数据量可以承受的话。二者速度上我并没有感觉到太大的差别。理论上Dr要快,但很多时候,其他的环节掩盖了这种差距。在设计到大数据量的时候。二者都有其自身的问题。Ds对本机内存要求很高,它不会采取任何调整策略,只是一味的占用内存,直到Down掉。而Dr几乎对本级内存没有要求。但服务器端压力无比巨大。多人操作时速度其慢。观察了Fill Ds的时候内存的情况。觉得可能是这样。Fill DS的时候内存是从开始到最后都在上升。说明服务器采取的是取出一段就传一段的策略。这样可以节省服务器端的内存。而Dr的会把所有需要的数据在服务器端进行排序。对内存要求高,达到饱和后,换入换出的时间肯定增加。很有意思的是在SQL server和Oracle下,二者的表现不一样。用Ds是,在sql server下本机内存始终保持较快的速度匀速增长。而在oracle下,则是先慢后快。个人理解是,MS对sqlserver的Fill方式进行了优化。而如果使用oracle的first row语句。在用cmd.excutereader的时候几乎不需要时间,而sql server需要N长的时间,全部进行完毕后再返回。看来二者需要融会贯通下了:)

海量数据:
进了公司才知道,什么是海量数据。也深深地感觉到,光靠硬件的升级来满足数据增长需要,是不现实的。而且,人们普遍对数据增长可能带来的问题缺少预判。在结构上和算法上都没有事先采取策略优化,导致数据增长后,无法应对带来的种种问题。被迫采取代价很高的挽救措施。一定要吸取别人的教训,增加这方面的思考和认识。最重要的是要在算法和结构上寻求突破。

晕。就4点了。打住了,不能再写了。不然明天又要头痛了。。。

Ms和Oracle:
Ms和Oracle对数据库连接都提供了Provider。本以为功能上没太大的不同。结果很多莫名其妙的问题都出在了Provider上。用Ms的Provider不支持Oracle的Clog类型,当SQL语句中出现了Clog的列,会报出无法识别的数据类型。而Oracle的Provider更为诡异。貌似对长SQL语句支持不好。同一条很长的SQL语句,用m的可以执行,用oracle的则报出缺少主键。。。

posted on 2006-05-04 03:56  duguguiyu  阅读(506)  评论(0编辑  收藏  举报

导航