首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何缓存XmlTextWriter数据?

如何缓存XmlTextWriter数据?
EN

Stack Overflow用户
提问于 2010-12-23 03:20:49
回答 4查看 860关注 0票数 2

我有一个页面,在那里我只是将一堆XML数据写到屏幕上。它进行了几次数据库调用来获取所有数据:

代码语言:javascript
复制
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
writer.WriteStartDocument();

writer.WriteStartElement("rss");
writer.WriteAttributeString("version", "2.0");

writer.WriteStartElement("channel");
writer.WriteElementString("title", "MyTitle");
writer.WriteElementString("link", "http://www.mysite.com/");

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
    SqlCommand cmd = new SqlCommand("SELECT * FROM vwXMLFeedData", conn);

    conn.Open();

    using (SqlDataReader rdr = cmd.ExecuteReader())
    {
        while (rdr.Read())
        {
            writer.WriteStartElement("item");
            writer.WriteElementString("title", rdr["Title"].ToString());
            writer.WriteElementString("link", rdr["URL"].ToString());
            writer.WriteEndElement();
        }
    }
}

writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();  

我想缓存所有的XML数据,这样我就不需要每次都调用数据库,但是我不确定如何使用XmlTextWriter来做这件事。这里最好的策略是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-23 03:31:06

如果您想将其缓存到内存中,则创建一个MemoryStream并写入其中。因此,初始化编写器的代码将变为:

代码语言:javascript
复制
MemoryStream CacheStream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(CacheStream, Encoding.UTF8);

填充流的代码保持不变,除了在关闭编写器之前,您需要保存流的缓冲区和大小:

代码语言:javascript
复制
writer.Flush();
long CachedDataSize = CacheStream.Position;
byte[] CachedData = CacheStream.Buffer;
writer.Close();

或者,如果希望缓存到文件中,只需创建一个FileStream并将其写入其中。

在这两种情况下,只要您想向用户发送信息,就可以从缓存的数据中读取。

票数 4
EN

Stack Overflow用户

发布于 2010-12-23 03:30:19

我建议,与其试图弄清楚如何缓存XmlTextWriter,不如换一种方式来看待它。

例如,您可以写入一个临时位置,然后为来自该位置的后续请求提供服务。

您需要弄清楚如何检测缓存的数据是否旧。

票数 0
EN

Stack Overflow用户

发布于 2010-12-23 03:30:36

使用MemoryStream而不是写出到Response.OutputStream -您可以将其转换为缓存字符串,然后将其输出到OutputStream

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4512843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档