.Net 4 TPL初体验
公司新防伪平台需要高效生成14位不重复、离散度高的全数字的防伪码,要求可以不依赖数据库排除重复码,要求快速反算(1秒以内),先用老方法单线程实现了;但是效率比较低每秒最快18个(本机配置是:intel core i5 m480,6G内存 / Win 7 64位旗舰版),在本机的虚拟机下最快每秒55个(intel core i5 m480,2G内存 / Win2003)。晕哦,64位系统咋表现不行哦,(32位Win7没用过^_^)。生产环境要求每秒要生成几百个,我又晕,怎么办呢。使用多线程?太考究功力了,线程同步和数据库异步存取等等难搞的问题会把人搞晕的。突然灵光一闪,试试.Net 4里TPL库吧,并行编程啊。一试效率立即提升了几十倍,但是出现了以下问题:
1、每批次生成5000个,有时一个批次生成不完5000个,可能只有3800.仔细看了下数据结果发现5000个自动被分成了2个批次,一个3800,一个1200.总体数据是对的。
2、有时生成几十万个以后,会出现跳码的现象(某个序列号没有出码)。
3、生成的码占用的序列号是乱的。
后来查了书,一句话引起了我注意:“TPL基础结构相当智能。如果它判断任务集没有从并行运行中受益,将选择按顺序执行。”,将最大的并行数设为1,问题都解决了,序号也有序列,只是效率下来了,不过还是超过了生成环境的要求。
记录下来,备忘,也给大家一个参考吧。TPL还真是个好东西,简化了线程的操作,提升了程序效率。牛,新技术果然很牛叉。看不懂别怪我啊,程序要跟具体业务挂钩的,如果你不懂防伪码,就不用管实现,看看效果就OK了,有需要自己试试TPL编程。希望懂的童鞋可以多多找我交流,我也才入行不久。如果实在是耽误了您宝贵时间又不知所云的话,委屈您高抬贵手点一下推荐吧! …… ^_^
附新老程序截图:
"作者:" 数据酷软件工作室
"出处:" http://datacool.cnblogs.com
"专注于CMS(综合赋码系统),MES,WCS(智能仓储设备控制系统),WMS,商超,桑拿、餐饮、客房、足浴等行业收银系统的开发,15年+从业经验。因为专业,所以出色。"
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++