Performance in General
While reading EricGu’s post on Performance of Generics, I was struck by this sentence which expresses perfectly what I was trying to express to a group of programmers earlier today who were arguing about the :? operators in C# being “faster” than explicit if statements. I called B.S. on the whole topic. Thanks Eric!
Performance is rarely dominated by small decisions, such as whether you use an ArrayList or a List<int> to store your data. It's usually dominated by algorithmic concerns - how you process data, how much redundant processing you're doing, etc. My experience is that the ability to be able to address these concerns is fairly well correlated with the resiliency of your code to change, which usually comes down to how clean and understandable the code is. If you have clean code and good tests, it is probably feasible to refactor your code to improve performance once you find out where the performance issues are.
Note that I'm not saying that you should put performance off until the end - that rarely works, as time at the end is fairly precious. I think you should focus on macro performance rather than micro performance. [EricGu]