C# 我应该输出缓存查找twitter RSS onload的控件吗?
我有一个用户控件,它出现在一个点击率很高的网站的几个页面上。其中一些页面包括我们的博客侧栏,我们的论坛侧栏,以及在我们的主页中间的SMAK。这意味着该控件被渲染了很多。该控件用于读取特定帐户的twitter RSS提要并写出最后2条推文。下面是该控件的大部分页面加载。我把它放在一个C# 我应该输出缓存查找twitter RSS onload的控件吗?,c#,asp.net,rss,outputcache,xmlreader,C#,Asp.net,Rss,Outputcache,Xmlreader,我有一个用户控件,它出现在一个点击率很高的网站的几个页面上。其中一些页面包括我们的博客侧栏,我们的论坛侧栏,以及在我们的主页中间的SMAK。这意味着该控件被渲染了很多。该控件用于读取特定帐户的twitter RSS提要并写出最后2条推文。下面是该控件的大部分页面加载。我把它放在一个try{}catch中,因为在生产环境中,站点似乎无法经常加载XML,所以我需要打开一条友好的错误消息 try { var feed = XmlReader.Create(ResourceManager.GetSt
try{}catch
中,因为在生产环境中,站点似乎无法经常加载XML,所以我需要打开一条友好的错误消息
try {
var feed = XmlReader.Create(ResourceManager.GetString("TwitterRSS"));
var latestItems = SyndicationFeed
.Load(feed)
.GetRss20Formatter()
.Feed
.Items
.Take(2);
rptTwitter.ItemDataBound += new RepeaterItemEventHandler(rptTwitter_ItemDataBound);
rptTwitter.DataSource = latestItems;
rptTwitter.DataBind();
} catch (Exception ex) {
phError.Visible = true;
}
如您所见,我只是获取最近的两个项目,并在前端的中继器中对它们进行重复。如果有什么失败,我会打开错误占位符,上面写着“Twitter不可用”
我经常在prod站点上看到这个错误消息,所以我想知道它是否对RSS提要发出了太多的请求。我曾考虑将控件的输出缓存10分钟,但我想,“如果它缓存在错误状态会怎么样?”?然后保证显示错误消息面板10分钟。我的问题是,如果它在创建新的缓存版本时显示catch中的错误,那么它真的会被缓存10分钟吗(假设我设置Duration=“600”
)?如果只呈现真实的Twitter数据,而不是错误消息,那么有没有人能告诉我如何更好地工作或缓存这些数据
提前感谢我不会缓存整个页面,而是通过您的
var latestItems = ....
语句以及是否收到错误。您可以使每个数据的缓存持续时间不同,因此,如果成功获取数据,则缓存时间会比出错时长。一个实现如下所示:
object Twitter = Cache["MyTwitter"];
if(Twitter==null)
{
// cache empty
try
{
var latestItems = (load items)
Cache.Insert("MyTwitter", latestitems, null, DateTime.Now.AddSeconds(600),
Cache.NoSlidingExpiration);
Twitter = latestitems;
}
catch(Exception ex)
{
Cache.Insert("MyTwitter", ex.ToString(), null, DateTime.Now.AddSeconds(60),
Cache.NoSlidingExpiration);
Twitter = ex.ToString();
}
}
if(Twitter is string)
{
phError.Visible = true;
}
else
{
rptTwitter.DataSource = Twitter;
// rest of data binding code here
}
这里有两个部分。第一部分是检查缓存,如果对象不在缓存中,则进行加载。如果出现错误,只需在缓存中存储一个字符串
然后使用对象,如果它是一个字符串,您知道您有错误。否则,这是检索twitter提要的结果。我不会缓存整个页面,而是由您的
var latestItems = ....
语句以及是否收到错误。您可以使每个数据的缓存持续时间不同,因此,如果成功获取数据,则缓存时间会比出错时长。一个实现如下所示:
object Twitter = Cache["MyTwitter"];
if(Twitter==null)
{
// cache empty
try
{
var latestItems = (load items)
Cache.Insert("MyTwitter", latestitems, null, DateTime.Now.AddSeconds(600),
Cache.NoSlidingExpiration);
Twitter = latestitems;
}
catch(Exception ex)
{
Cache.Insert("MyTwitter", ex.ToString(), null, DateTime.Now.AddSeconds(60),
Cache.NoSlidingExpiration);
Twitter = ex.ToString();
}
}
if(Twitter is string)
{
phError.Visible = true;
}
else
{
rptTwitter.DataSource = Twitter;
// rest of data binding code here
}
这里有两个部分。第一部分是检查缓存,如果对象不在缓存中,则进行加载。如果出现错误,只需在缓存中存储一个字符串
然后使用对象,如果它是一个字符串,您知道您有错误。否则,这是检索推特提要的结果。谢谢!这是一段很棒的代码片段。我用过了,效果很好。谢谢!这是一段很棒的代码片段。我用过,效果很好。