It depends how you define 'application name'.
Application.ExecutablePath
returns the path for the executable file that started the application, including the executable name, this means that if someone rename the file the value changes.
Assembly.GetEntryAssembly().GetName().Name
returns the simple name of the assembly. This is usually, but not necessarily, the file name of the manifest file of the assembly, minus its extension
So, the GetName().Name seem more affidable.
For the faster one, I don't know. I presume that ExecutablePath is faster than GetName() because in the GetName() requires Reflection, but this should be measured.
EDIT:
Try to build this console app, run it and then try to rename the executable file name using the Windows File Explorer, run again directly with the double click on the renamed executable.
The ExecutablePath reflects the change, the Assembly name is still the same
using System;
using System.Reflection;
using System.Windows.Forms;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Assembly.GetEntryAssembly().GetName().Name);
Console.WriteLine(Application.ExecutablePath);
Console.ReadLine();
}
}
}