I finished adding feed URLs to my blogroll and cleaned up the design somewhat. Some bugs were fixed too. On optimization front, regular expressions are no longer being instantiated on the fly but compiled and shared when the webapp launches. Page templates are still being built on every request, but that will get fixed too. Performance probably improved unbelievably from the original code but I think I can push it much closer to the bare metal before I am pushing up hill.
Biggest chore ahead is removing unnecessary use of ASP.NET controls and ViewState abuse. ViewState is on by default and I have to check each page to make sure viewstate can be turned off. For pages that does need to use viewstate, I'll have to inject EnableViewState=false on all form controls except for those that actually need it. ViewState is one of those features that is both a blessing and a curse.
BTW, there is no permalink image (#) any more because I use post title as the permalink. For ease of use, I prefixed all the titles with '#' to indicate that title links are permalinks.