Start by finding out what the current performance is in numeric terms: use the
Stopwatch class[
^] to execute that code in a tight loop a considerable number of times to give you a "baseline" speed to work against.
Then time individual elements to find where the slowest sections are: focus on those for performance improvements as they give the biggest rewards - reducing the the execution time by 50% for a section that uses 1% of the runtime isn't worth as mush as reducing the runtime by 10% of a section that uses 50%! Identifying bottlenecks is the key here.
Each time you make an improvement, quantify it: you have a set of starting point values, so use them to evaluate your changes. And remember, quite often the best improvements aren't "simpler code" but "better algorithms" - throwing code away and replacing it with a whole different way of working can give massive improvements (or make things significantly worse of course - that's why you need a baseline time to work against).
Good luck - this is not a simple task, and we can't help you in practice at all as we have no access to your data or systems: you need both as well as your code to get any meaningful improvements.