性能优化之道

版权声明:本文为博主原屙文章,喜欢你就担走。 https://blog.csdn.net/leftfist/article/details/88800891

性能优化之道,绝大部分在于代码也。

软件开发有好几个层次:架构、设计、实现。架构是最高层面,设计次之,架构和设计不合适,性能再怎么调,总体也好不到哪里去。

但对于一般程序员而言,负责的是一个个模块的具体实现。本文说的优化,就是指这部分的代码优化。我一贯以来都是那个观点,如果一个模块慢,十有八九是我们的代码烂。不要去扯什么机器、内存、多线程,甚至是数据库产品,说人家不支持大数据。多线程就是多开几个线程而已。线程是啥,跟CPU息息相关,如果我们的代码中有许多IO操作,那你多开些线程,会有比较明显的作用,否则就是多消耗些资源罢了。

话说我们做的项目有个功能,客户反映很慢。原本负责该项目的小伙子近期离职了,我只好接手,跟进修改。按照小伙子原先的设想,应该改为多线程。但我看了下,觉得没必要,只是将代码优化了下,测试后时间是原来的四分一。

原先代码,主要是滥用了数据库。很多年轻的程序员,都没有这样一种意识:数据库是很宝贵的资源,要省着点用。但他们是富起来的一代,生活中,家庭生活富足,没有后顾之忧,一言不合就离职,潇洒得很;工作上,现在的机器普遍很快,内存又多,原本的烂代码根本就不是一个事。算法,数据结构,是啥?算啥?

但如果数据量一大,就会露出一些迹象。

原代码:

//获得购物车ID
string master = Get_MasterById(userId, (int)EnumDownloadMasterStatus.新建);
if (master == "")
{// 购物车ID为空?
	//新建一个购物车
	InsertMaster(userId, (int)EnumDownloadMasterStatus.新建);
	//获得购物车ID
	master = Get_MasterById(userId, (int)EnumDownloadMasterStatus.新建);
}
//执行sql语句得到的商品ID集合
IList<Downloadslave> fileLs = Get_FileIdLs(sql,master);
//利用商品ID集合获得对应的商品信息集合,然后插入到购物车
_dataService.Inster_DownloadSlave(fileLs.ToList());

这里每一步都用到数据库,从数据库中来,到数据库中去。

新代码,将一些操作合成一步,尽量在一次数据库连接中完成:

//获得购物车ID
int id = getShpCart(userId,status);
if (id == 0)
{//购物车为空,建一个,并返回新建购物车ID 
	id = createShpCart(userId, status);
}
//加入购物车
//这个方法里使用了insert into ... select sth from ...句式,尽量一步完成
buy(sql,购物车ID);

像我,可能还保留着老派程序员的作风,做事喜欢想前想后,但有时未免想得太多,给人印象是做东西很慢,不受欢迎。年轻人干劲十足,做东西很快,但在我看来,未免太随意了吧。但多数情况下,年轻人的做法比较好,容易出东西,领导欣赏,觉得效率很高。

我要向他们学习。

猜你喜欢

转载自blog.csdn.net/leftfist/article/details/88800891