¿Hay incluso rápida aplicación sobre varios bytes cadena de caracteres Unicode convertido al wstring?

StackOverflow https://stackoverflow.com/questions/2145862

  •  23-09-2019
  •  | 
  •  

Pregunta

En mi proyecto, donde adopté algoritmo de búsqueda de cadenas aho-corasick que hacer algún modo de filtro de mensajes en el lado del servidor, el servidor de mensajes consiguió es una cadena de caracteres de varios bytes. Sin embargo, después de varias pruebas me encontré con el cuello de botella es la conversión entre la cadena y mulitbyte wstring Unicode. Lo que yo uso ahora es el par de mbstowcs_s y wcstombs_s, que tiene casi el 95% de coste de tiempo de todo el modo. Además, he intentado MultiByteToWideChar / WideCharToMultiByte, obtuvo sólo el mismo resultado.  Por eso me pregunto si hay alguna otra manera más eficiente para hacer el trabajo? Mi proyecto se basa en VS2005, y la cadena convertida contendrá caracteres chinos.   Muchas gracias.

No hay solución correcta

Otros consejos

Hay una serie de posibilidades.

En primer lugar, ¿qué quiere decir con "carácter multi-byte"? Hacer que UTF8 media o un sistema ISO DBCS?

Si nos fijamos en la definición de UTF-8 y UTF16 hay margen para hacer una conversión altamente optimizado, arrancando los bits "x" y reformatear ellos. Véase, por ejemplo http://www.faqs.org/rfcs/rfc2044.html habla de UTF8 <==> UTF32. Ajustar por UTF16 sería simple.

La segunda opción podría ser la de trabajar por completo en UTF16. Hacer que su página Web (o interfaz de usuario de diálogo o lo que sea) en UTF16 y obtener la entrada del usuario de esa manera.

Si todo lo demás falla, hay Aare otros algoritmos de cuerda que Aho-Corasick. Posiblemente busque un algoritmo que funciona con su codificación original.

[Agregado 29-Ene-2010] Ver http://www.cl.cam. ac.uk/~mgk25/ucs/utf-8-history.txt para más información sobre conversiones, incluyendo dos implementaciones C de mbtowc () y wctomb (). Estos están diseñados para trabajar con arbitrariamente grandes wchar_ts. Si sólo tiene wchar_ts de 16 bits entonces se puede simplificar mucho.

Estos sería mucho más rápido que las versiones genéricas (página de códigos y minúsculas) en la biblioteca estándar.

Desaprobado (creo), pero siempre se podría utilizar las versiones que no son seguros (mbstowcs y wcstombs). No estoy seguro si esto tendrá una mejora marcada sin embargo. Alternativamente, si el conjunto de caracteres es limitado (a - z, 0 - 9, por ejemplo)?, Siempre se puede hacerlo de forma manual con una tabla de búsqueda ..

Tal vez usted puede reducir la cantidad de llamadas a MultiByteToWideChar?

Se podría adoptar también, probablemente, Aho-Corasick para trabajar directamente en cadenas multibyte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top