02.03.2013, 12:24
Quote:
Код:
if(strncmp(in_language, "ru", 2) == 0) { conv = iconv_open("CP1251", "UTF8"); } else { conv = iconv_open("CP1252", "UTF8"); } if(conv == (iconv_t)(-1)) return; |
Тест:
PHP код:
#include<stdio.h>
#include<iconv.h>
#include<time.h>
#include<unistd.h>
#include<string.h>
#define CONVERTS 1000000
int main(int argc, char *argv[])
{
clock_t tm1, tm2;
long i;
char str[]="самая обычная, не длинная и не короткая строчка, которая отправляется в чат";
char buff[256];
iconv_t conv;
size_t size_in, size_out;
char *ptr_in, *ptr_out;
//тест №1
memset(buff, 0, sizeof(buff));
tm1 = clock();
//конвертируем бедную строчку до посинения..
for(i = 0; i < CONVERTS; ++i)
{
conv = iconv_open("CP1251", "UTF8"); //вызываем каждый раз в цикле
ptr_in = str;
size_in = strlen(str);
ptr_out = buff;
size_out = sizeof(buff);
iconv(conv, &ptr_in, &size_in, &ptr_out, &size_out);
iconv_close(conv);
}
tm2 = clock();
fprintf(stderr, "результат теста №1 (%d циклов): %.3f сек\n", CONVERTS, (tm2-tm1-0.0)/CLOCKS_PER_SEC);
fprintf(stderr, "%s\n", str);
fprintf(stderr, "%s\n", buff);
//тест №2
memset(buff, 0, sizeof(buff));
tm1 = clock();
conv = iconv_open("CP1251", "UTF8"); //вызываем один раз перед циклом
for(i = 0; i < CONVERTS; ++i)
{
ptr_in = str;
size_in = strlen(str);
ptr_out = buff;
size_out = sizeof(buff);
iconv(conv, &ptr_in, &size_in, &ptr_out, &size_out);
}
iconv_close(conv);
tm2 = clock();
fprintf(stderr, "результат теста №2 (%d циклов): %.3f сек\n", CONVERTS, (tm2-tm1-0.0)/CLOCKS_PER_SEC);
fprintf(stderr, "%s\n", str);
fprintf(stderr, "%s\n", buff);
return 0;
}

Ничего не мешает, ничем не быстрее (большая скорость - если сравнивать со скриптом). Но так удобней! Хотя бы потому, что можно редактировать файл без перезагрузки плагина, и все изменения сразу вступят в силу.