13

which one is better to use and why? I mean in which aspects these two commands differ and how? Performance, readability, ...

new FileInfo(path).Name or Path.GetFileName(path)

3 Answers3

14

Simply as you won't have to Create a new Object for using Path.GetFilename() it will perform better.

Here is a Comparison for both:

Code:

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

IL:

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

Code:

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
Shekhar_Pro
  • 18,056
  • 9
  • 55
  • 79
  • 12
    You're correct in saying Path.GetFileName is faster, but it's wrong to think its *automatically* faster because it's static. Who's to say it's not creating objects internally? – Joe Feb 13 '11 at 16:17
  • 3
    @joe Path only separates the string given. Nothing else. It is a convenience so that you do not have to do it yourself. It does not create any other objects, apart from the strings. – ThunderGr Jan 29 '14 at 14:50
10

I'd suggest using Path.GetFilename() because it simply parses path and returns file name. On other hand FileInfo object will check if executed code has rights to access specified file which is relatively slow.

Cédric Bignon
  • 12,892
  • 3
  • 39
  • 51
Oleg Rudckivsky
  • 920
  • 6
  • 10
  • 1
    Also the overhead of creating a FileInfo object, so if this is happening in a loop on each iteration, it affects performance adversely – Abhijeet Patel Feb 12 '11 at 19:30
0

Performancewise Path.GetFilename() will outperform the other version as it is static. Your first version creates an object which has to be instantiated and garbage collected.

Readability: Path.GetFilename() clearly wins IMHO!

The way they figure out the name won't differ much I think.

Krumelur
  • 32,180
  • 27
  • 124
  • 263
  • 3
    -1 It has nothing to do with static or not. The performance difference is due to the permission checks. – Mark Byers Feb 12 '11 at 19:04
  • 1
    What are you going on about? Of course it makes a difference if an object has to be created or not. In case of "new FileInfo()" it HAS to be created. See Shekhar_Pro's answer to see the IL representation. If FileInfo() does additional permission checks is a totally different story. – Krumelur Feb 12 '11 at 21:18
  • 2
    Path only does parsing. No streams are opened. No permissions checked, nothing like that. – ThunderGr Jan 29 '14 at 14:51