IBuySpy Portal 中使用 PortalModuleControl 这个继承自UserControl的类来作为站点中所有Module的基类,用户控件的工作方式是,当页面上实例化一个用户控件时,自动将它的所有子控件全部Render成HTML,然后输出,为了提高Module的工作效率,每个Module可以设置自己的缓存时间,在缓存时间内,系统不会再重复Render它的所有子控件,而是在第一次Render的时候,把结果HTML文本缓存起来,当下次需要的时候再直接输出。 实现缓存功能,IBuySpy是通过CachedPortalModuleControl实现的。 因为IBuySpy页面上的Module都是通过LoadControl()方法来动态载入到页面上的,像这样: PortalModuleControl portalModule = (PortalModuleControl) Page.LoadControl(_moduleSettings.DesktopSrc); portalModule.PortalId = portalSettings.PortalId;portalModule.ModuleConfiguration = _moduleSettings; parent.Controls.Add(portalModule); 当检测到一个Module的CacheTime>0时,代码则: CachedPortalModuleControl portalModule = new CachedPortalModuleControl(); portalModule.PortalId = portalSettings.PortalId;portalModule.ModuleConfiguration = _moduleSettings; parent.Controls.Add(portalModule); 就是说,代码不会再载入PortalModuleControl类型的控件了,而是载入CachedPortalModuleControl来实现的。 下面看看CachedPortalModuleControl是如何实现缓存的: private String _cachedOutput = “”; 这里定义了一个String变量,保存缓存的内容 protected override void [...]