Out of curiosity...what happens when we call a method that returns some value but we don\'t handle/use it? And we also expect that sometimes this returned value could be rea
The returned value (or reference, if it's a reference type) is pushed onto the stack and then popped off again.
No biggy.
If the return value isn't relevant, you can safely do this.
But be sure that it isn't relevant, just in case.
Here's some code:
static string GetSomething()
{
return "Hello";
}
static void Method1()
{
string result = GetSomething();
}
static void Method2()
{
GetSomething();
}
If we look at the IL:
Method1:
.locals init ([0] string result)
IL_0000: nop
IL_0001: call string ConsoleApplication3.Program::GetSomething()
IL_0006: stloc.0
IL_0007: ret
Method2:
IL_0000: nop
IL_0001: call string ConsoleApplication3.Program::GetSomething()
IL_0006: pop
IL_0007: ret
Exactly the same number of instructions. In Method1, the value is stored in the local string result (stloc.0), which is deleted when it goes out of scope. In Method2, the pop operation simply removes it from the stack.
In your case of returning something 'really big', that data has already been created and the method returns a reference to it; not the data itself. In Method1(), the reference is assigned to the local variable and the garbage collector will tidy it up after the variable has gone out of scope (the end of the method in this case). In Method2(), the garbage collector can get to work, any time after the reference has been popped from the stack.
By ignoring the return value, if it really isn't needed, the garbage collector can potentially get to work sooner and release any memory that's been assigned. But there's very little in it (certainly in this case), but with a long running method, hanging onto that data could be an issue.
But far-and-away the most important thing is to be sure that the return value that you're ignoring isn't something that you should be acting on.