You can't compare them, they do different jobs, so there isn't a "best" or "good" one.
The first example
A a = new A();
public void MethodB()
{
for (int i = 0; i < 500000; i++)
{
a.MethodA();
}
}
Calls MethodA on teh same instance of the class every time.
The second example
A a;
public void MethodB()
{
for (int i = 0; i < 500000; i++)
{
a = new A();
a.MethodA();
}
}
Creates a new instance for each time around the loop, and calls MethodA on that instance.
The difference is subtle, but if you think about cars then in the first instance you buy a car, and you drive it to work each day. In the second instance, you buy a new car each day and drive it to work, then discard it at the end of the day!
There is no "best" or "good" in that - for some approaches the first is right, for others it's the second.