首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于程序的效率.请大侠帮小弟我看一下这段程序

2012-03-25 
关于程序的效率.请大侠帮我看一下这段程序.请各位帮我看一下这段程序的瓶颈在哪儿.有没有什么优化的办法.

关于程序的效率.请大侠帮我看一下这段程序.
请各位帮我看一下这段程序的瓶颈在哪儿.
有没有什么优化的办法.
我测试了一下这段程序运行时间大概16ms左右.不知道算不算慢.
谢谢!

C/C++ code
sbuffer =(char *)malloc(MAXLENGTH);//MAXLENGTH = 1024memset(sbuffer,0,MAXLENGTH);ebuffer =(char *)malloc(MAXLENGTH);memset(ebuffer,0,MAXLENGTH);for(csp=pHead;csp!=NULL;csp=csp->next)//重头开始遍历整个链表.暂时不超过100个节点.{   if(csp->enterFlag == TRUE && csp!=pHead)   {      GetTextExtentPoint32(hdc,csp->prior->str,strlen(csp->prior->str),&csize);      ilength = csize.cx;      for(i=1;i<strlen(csp->str);i++)      {         if(*(csp->str+i) == ' ' || i 


[解决办法]
C/C++ code
sbuffer =(char *)malloc(MAXLENGTH);//MAXLENGTH = 1024memset(sbuffer,0,MAXLENGTH);ebuffer =(char *)malloc(MAXLENGTH);//(如果MAXLENGTH是常量)都知道长度了还动态分配干什么?
[解决办法]
把所有的strlen(csp->str)进行替换
这个开销很大
例如,申请一个临时变量nLenTemp = strlen(csp->str)
这会提高你的效率
[解决办法]
其实,要想提高效率,你这个设计本身就有问题,整个文本存储在一个固定的缓冲里不需要修改,csp那个链表的结点中只是保存一个格式

随便先改了一下:

C/C++ code
for (csp = pHead->next; csp != NULL; csp = csp->next){    if(csp->enterFlag)    {        int curlen = strlen(csp->str);        int prilen = strlen(csp->prior->str);                GetTextExtentPoint32(hdc, csp->prior->str, prilen, &csize);                ilength = csize.cx;                char* pos = strstr(csp->str + 1, " ");        if (pos)        {                        GetTextExtentPoint32(hdc, csp->str, pos - csp->str, &csize);            if (csize.cx + ilength <= sp.cxClient - sp.cxChar)            {                memcpy(csp->prior->str + prilen, csp->str, pos - csp->str);                csp->prior->str[prilen + pos - csp->str] = '\0';                                memmov(csp->str, pos, pos - csp->str);                /*                if(vp.iVertPos == 0 && csp->LineNum == vp.curRow && col >= vp.curCol)                else if(vp.iVertPos == 0 && csp->LineNum == vp.curRow               && col <  vp.curCol)                else if(vp.iVertPos > 0  && csp->LineNum == vp.curRow + vp.iVertPos && col >= vp.curCol)                else if(vp.iVertPos > 0  && csp->LineNum == vp.curRow + vp.iVertPos && col <  vp.curCol)                */                                    }        }        if (curlen == 0)        {            temp = csp;            csp  = csp->prior;            /*            if(vp.iVertPos==0 && temp->LineNum < vp.curRow)                else if(vp.iVertPos==0 && temp->LineNum >= vp.curRow)            else if(vp.iVertPos>0 && vp.iVertPos<Range && temp->LineNum < vp.curRow+vp.iVertPos)                        else if(vp.iVertPos>0 && vp.iVertPos<Range && temp->LineNum >= vp.curRow+vp.iVertPos)            else if(vp.iVertPos==Range && temp->LineNum < vp.curRow+vp.iVertPos)            else if(vp.iVertPos==Range && temp->LineNum >= vp.curRow+vp.iVertPos)            */                        RowDelete(hwnd, pHead, temp->LineNum);        }                vp.iPage      = sp.cxBuffer ;        vp.iMaxLength = max(vp.iMaxLength, curlen);    }}
[解决办法]
如果效率差距过大,还是考虑改变算法吧。

可以读一下开源的文本编译器,看看人家怎么写的~
嘿嘿

热点排行