Bueno, he estado escribiendo controladores de sistema de archivos durante 20 años y diría que Rex es correcto. Generar un guid es mucho más rápido, ya que requiere mucha menos sobrecarga que buscar un nombre de archivo único. GetTempFileName realmente crea un archivo, lo que significa que tiene que llamar a toda la pila de controladores del sistema de archivos (quién sabe cuántas llamadas serían y un cambio al modo kernel). GetRandomFileName parece que es más rápido, sin embargo, confiaría en la llamada GUID para ser aún más rápido. Lo que las personas no se dan cuenta es que incluso las pruebas de la existencia de un archivo requieren una llamada completa a través de la pila del controlador. En realidad resulta en un abrir, obtener atributos y cerrar (que son al menos 3 llamadas, dependiendo del nivel). En realidad, es un mínimo de 20 llamadas a funciones y una transición al modo kernel. La garantía de GUIDS de singularidad es lo suficientemente buena para la mayoría de los propósitos.
Mi recomendación es generar el nombre y crear el archivo solo si no existe. Si lo hace, lanza una excepción y captúrala, luego genera un nuevo guid y vuelve a intentarlo. De esta forma, tienes cero posibilidades de errores y puedes dormir tranquilo por la noche.
En una nota lateral, la verificación de errores es tan exagerada. El código debe diseñarse para que se bloquee si las suposiciones son incorrectas, o detectar excepciones y tratarlas en ese momento. Es mucho más rápido pulsar y abrir y direccionar en la pila de excepciones, que comprobar cada error en cada función.
¿Por qué no utiliza una forma * suficientemente rápida *? – Joren
Una excelente pregunta. La respuesta es que estoy tratando de exprimir cada onza de rendimiento de esta aplicación de sistema de archivos intensivo. –
Esto realmente depende de lo que quiere decir con "único": ¿es universalmente único, único dentro de un sistema de archivos, único entre diferentes hilos en el mismo programa ...? –