Not discarded, but rather ignored by addStoredBlock(). Therefore, with your patch the list of toInvalidate blocks will not be calculated and processed. And so deletion of replicas on data-nodes that don't belong to any file will be delayed until the next block report.
My point is that there is trade-off, which you are not mentioning here, unless I missed something.
The trade-off is: you will start faster, but space cleanup will be delayed.
And the only way to fix it that I can see, is to send the second block report right after the first one, which will double the load on NN during startup.
What is interesting though, the numbers you present show that construction of LinkedList in reportDiff() is time consuming, because the actual speedup is achieved because you reuse the same Block object, rather than creating them for each processed block as reportDiff() does.
So, may be if we address this, we can optimize overall block processing, including the startup time.
Btw, if it helps, you can use NNThroughputBenchmark to measure block report processing on a single node.