公司新防偽平台需要高效生成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編程。希望懂的童鞋可以多多找我交流,我也才入行不久。如果實在是耽誤了您寶貴時間又不知所雲的話,委屈您高抬貴手點一下推薦吧! …… ^_^
附新老程序截圖:




