Proverò anche in release.
Sono riuscito a farmi dare l'implementazione che sembrerebbe metterci solo 2 secondi. E' fatta in C#

codice:
protected static void Triangulize(Model3D model)
        {
            int totalVertices = 0;
            int strideSize = model.Stride;
            float[] vertexTemp = new float[strideSize];
            List<float> newVerticesList = new List<float>();
            List<int> newIndexList = new List<int>();

            for (int i = 0; i < model.VertexCount; i++)
            {
                //per ogni vertice
                //salvo il vertice
                for (int j = 0; j < strideSize; j++)
                {
                    vertexTemp[j] = model.Data[i * strideSize + j];
                }

                //controlla se già esiste
                int currentVertex = -1;
                for (int j = 0; j < totalVertices; j++)
                {
                    //confronta il vertice attuale con quelli già inseriti
                    bool equal = true;
                    for (int k = 0; k < strideSize; k++)
                    {
                        if (Math.Abs(vertexTemp[k] - newVerticesList[j * strideSize + k])<epsilon)
                        {
                            equal = false;
                            break;
                        }
                    }

                    if (equal)
                    {
                        currentVertex = j;
                        break;
                    }
                }

                if (currentVertex == -1)
                {
                    //nuovo vertice, aggiungere
                    newIndexList.Add(totalVertices);
                    totalVertices++;
                    for (int j = 0; j < strideSize; j++)
                        newVerticesList.Add(vertexTemp[j]);
                }
                else
                {
                    //il vertice già esiste, aggiungere solo l'indice
                    newIndexList.Add(currentVertex);
                }
            }

            model.Data.Clear();
            model.Data.AddRange(newVerticesList);
            model.IndexData.Clear();
            model.IndexData.AddRange(newIndexList);
        }
Purtroppo nemmeno questo è codice compilabile. Sto cercando di capire un pò come fa.