2011-02-12 15 views

Respuesta

9

Simplemente no tendrá que crear un nuevo objeto para usar Path.GetFilename() tendrá un mejor rendimiento.

Aquí es una comparación por los dos:

Código:

Path.GetFileName("G:\\u.png") 

IL:

IL_0000: ldstr  "G:\u.png" 
IL_0005: call  System.IO.Path.GetFileName 

Código:

new FileInfo("G:\\u.png").Name 

IL:

IL_0000: ldstr  "G:\u.png" 
IL_0005: newobj  System.IO.FileInfo..ctor 
IL_000A: callvirt System.IO.FileSystemInfo.get_Name 
+10

Tiene razón al decir que Path.GetFileName es más rápido, pero está mal pensar que es * automáticamente * más rápido porque es estático. ¿Quién puede decir que no está creando objetos internamente? – Joe

+0

+1 eso es un punto ... –

+2

@joe Path solo separa la cadena dada. Nada más. Es una conveniencia para que no tenga que hacerlo usted mismo. No crea ningún otro objeto, aparte de las cadenas. – ThunderGr

0

Performancewise Path.GetFilename() supere a la otra versión, ya que es estática. Su primera versión crea un objeto que debe ser instanciado y recolectado.

Legibilidad: Path.GetFilename() gana claramente en mi humilde opinión!

La forma en que se dan cuenta del nombre no será muy diferente, creo.

+3

-1 No tiene nada que ver con estática o no. La diferencia de rendimiento se debe a las verificaciones de permisos. –

+1

¿Qué estás pensando? Por supuesto, hace una diferencia si un objeto tiene que ser creado o no. En caso de "new FileInfo()" TIENE que ser creado. Ver la respuesta de Shekhar_Pro para ver la representación de IL. Si FileInfo() comprueba permisos adicionales es una historia totalmente diferente. – Krumelur

+2

La ruta solo analiza. No se abren las secuencias. No hay permisos marcados, nada de eso. – ThunderGr

8

Sugiero usar Path.GetFilename() porque simplemente analiza la ruta y devuelve el nombre del archivo. Por otro lado, el objeto FileInfo comprobará si el código ejecutado tiene derechos para acceder al archivo especificado, que es relativamente lento.

+1

También la sobrecarga de crear un objeto FileInfo, por lo que si esto sucede en un ciclo en cada iteración, afecta negativamente al rendimiento –