读书人

哪方法文本效率最高?该如何处理

发布时间: 2012-02-15 12:09:44 作者: rapoo

哪方法文本效率最高?
文本A 200M

格式:
dsafdsafd
dsafdsafdsafdsa
dsafdsafdsa
dsafdsaf
.....


文本B 150M

格式:相同

用哪方法文本A中文本B中相同的行掉

最好不要用什之的

[解决办法]
分两种优化,1种是逻辑上算法的优化,一般最后都需要对比两段字串是否相同而这个操作是最耗费时间的
第二种就是代码级的优化。下面大概写了算法,使用了SIMD指令:

Delphi(Pascal) code
Mov esi,srcMov edi,destMov ebx,ptmp //size 64byte@loop://读入A一行128bytexorps   xmm0,xmm0movups  xmmword ptr [ebx],  xmm0movups   xmm0, xmmword ptr [esi]movups   xmm1, xmmword ptr [esi+$10]movups   xmm2, xmmword ptr [esi+$20]movups   xmm3, xmmword ptr [esi+$30]movups   xmm4, xmmword ptr [esi+$40]movups   xmm5, xmmword ptr [esi+$50]movups   xmm6, xmmword ptr [esi+$60]movups   xmm7, xmmword ptr [esi+$70]//与B一行 xorxorps   xmm0, xmmword ptr [edi]xorps   xmm1, xmmword ptr [edi+$10]xorps   xmm2, xmmword ptr [edi+$20]xorps   xmm3, xmmword ptr [edi+$30]xorps   xmm4, xmmword ptr [edi+$40]xorps   xmm5, xmmword ptr [edi+$50]xorps   xmm6, xmmword ptr [edi+$60]xorps   xmm7, xmmword ptr [edi+$70]//判断是否全相等xorps   xmmword ptr [ebx],xmm0xorps   xmmword ptr [ebx],xmm1xorps   xmmword ptr [ebx],xmm2xorps   xmmword ptr [ebx],xmm3xorps   xmmword ptr [ebx],xmm4xorps   xmmword ptr [ebx],xmm5xorps   xmmword ptr [ebx],xmm6xorps   xmmword ptr [ebx],xmm7Xor eax,eaxCmp  eax,[ebx]Cmp  eax,[ebx+4]Cmp  eax,[ebx+8]Cmp  eax,[ebx+$C]//判断后这里可以处理如果[ebx]16byte全0则代表两行相同//…..Add esi,$80 //下一行Add edi,$80Cmp esi,endlenJnz loopCmp edi,endlenJnz loop 

读书人网 >.NET

热点推荐