The SiteMap is primarily designed for binding to the menu controls. I would not use it for the purposes you are trying to use it for.
We don't load all the modules for the whole site into memory, we only load the modules for the current requested page.
There are business classes and methods for retrieving the page modules by passing in the page id, but I certainly would not be calling those methods in a loop while iterating over the site map.
mojoBasePage is a base class for .aspx pages, it is web UI code, it is not a business object, we have mojoPortal.Business.PageSettings class as the business object that reperesents CMS pages.
using mojoPortal.Business.WebHelpers;
PageSettings currentPage = CacheHelper.GetCurrentPage() load the current page and its modules.
Hope that helps,
Joe