Rendimiento

No leas esta sección hasta que estés seguro que tu programa está correcto, por ejemplo, cuando estés seguro que funciona correctamente y no tiene errores. Es más importante que el código sea correcto a que sea rápido. Un programa lento pero correcto es mucho mejor a uno rápido pero con errores.

Si quieres optimizar tu programa, el primer paso es determinar un perfil al programa ejecutándolo con datos de la vida real y recopilar puntos calientes que requieran optimización. Esto ayudará a determinar los lugares que necesitan optimizarse. Es importante que nunca adelantes la optimización si no tienes una idea clara sobre donde está el problema. Podrías terminar perdiendo el tiempo en agilizar una rutina que no es la causa del cuello de boteLla y como resultado podrías terminar ofuscando dicha rutina. Esto podría reducir la legibilidad y mantenibilidad del código sin ganancia visible en velocidad.

Un código sencillo es bueno porque es fácil de entender y mantener. Si puedes escribir código simple que además sea potente y rápido, tanto mejor. Si tienes un trozo de código inteligente pero que no es fácil de seguir, entonces documéntalo para que las personas no lo estropeen accidentalmente.

No escribas código que sea difícil de leer y mantener por el sólo hecho de hacerlo más rápido. En cambio, prefiere un algoritmo agradable y claro e impleméntalo claramente.

Hacer un buen trabajo en el caso general es a menudo mejor que tener muchos casos especiales. Sólo provee casos especiales cuando se han identificado puntos débiles en el programa.

Administración de listas en Glib

Evita emplear construcciones que terminen ralentizando los algoritmos. Si usas g_list_insert_sorted() o g_list_append() sin ningún cuidado, fácilmente puedes tener un algoritmo que se ejecuta en tiempo proporcional a O(n2). Normalmente puedes crear listas hacia atrás, usando g_list_prepend(), e invirtiéndola cuando hayas terminado usando g_list_reverse(). Esta es una operación O(n). Y si necesitas una lista ordenada, puedes crearla de la misma forma (hacia atrás) y una vez terminado, usar g_list_sort().

Si necesitas una lista ordenada en todo momento, puede ser mejor emplear un estructura de árbol o un híbrido lista/árbol. Si necesitas construir una lista añadiendo nodos a ella, mantén un puntero al final de la lista y ve cambiándola según sea apropiado; esto te permitirá insertar un nodo al inicio o al final en un tiempo constante.