C函数有时返回太慢

时间:2015-01-26 17:41:44

标签: c performance apache function

我正在编写一个apache模块,我在这里有一个函数,它接受一个I​​P地址(在myip中定义)并检查apache表(定义为iplist)以查看IP地址是否存在。

这是我用来让apache从httpd.conf文件加载我的行的代码,将它们添加到IP地址列表中:

const char *exempt_ip(cmd_parms *cmd,void *cfg,const char *arg){
    dir_config *conf=(dir_config*)cfg;
    if (conf){
        char ip[7]="XXXXXXX";
        snprintf(ip,sizeof(ip),"IP%i",config.numIPs);
        apr_table_set(conf->iplist,ip,arg);
        config.numIPs++;
    }
    return NULL;
}

这就是导致服务器有时甚至在只有4个键和4个值的表上响应缓慢的代码,但它确实有效:

const int ip_matched(apr_table_t* iplist,const char* myip){
    const char* v;char ip[7]="XXXXXXX";int ret=0;
    int ic;
    for (ic=1;ic<config.numIPs;ic++){
        snprintf(ip,sizeof(ip),"IP%i",ic);
        v=apr_table_get(iplist,ip);
        if (strcmp(v,myip)==0){
            ret=1;
            ic=config.numIPs+1;
        }
    }
    return ret;
}

也许我可以使用更快的原生C函数?有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

在两个职能中,

char ip[7]="XXXXXXX";

拥有7个字符,但没有终结符,它们应该是

char ip[8]="XXXXXXX";

char ip[]="XXXXXXX";

但我知道这不是一个合适的答案。