目前正在编写一个返回一些XML的.ashx文件。这是我在ProcessRequest
sub
Dim xml As XmlDocument = getXML(context.Request.QueryString("products"))
xml.Save(context.Response.Output)
我想知道我是否也可以某种方式使用XmlTextWriter
,如果是这样会更好/更快?
速度是迄今为止最重要的因素,但我对VB.net中的编程非常陌生,所以如果还有其他我应该知道的其他内容请告诉我。
Xml内容,任何人都有兴趣...这是这个,但有可能返回最多46个产品。
<?xml version="1.0" encoding="utf-8"?>
<products>
<product>
<id>58</id>
<prices />
<instock>True</instock>
<shipping> - This product will ship today if ordered within the next 2 hours and 46 minutes.</shipping>
</product>
<product>
<id>59</id>
<prices />
<instock>False</instock>
<shipping>This product will be in stock soon</shipping>
</product>
</products>
答案 0 :(得分:1)
我认为首先关注的是如何序列化XML。最多46个产品似乎不是非常大量的数据,因此更快地序列化或更有效地处理内存的效果不是太大。
相反,我建议尽可能缓存输出。如果数据不依赖于用户且不经常更改,则可以将结果存储在缓存中并从那里进行服务。而不是将XmlDocument存储在缓存中,而是存储序列化版本,以便您只需将字符串写入响应。以下示例显示了如何使用缓存:
public void ProcessRequest(HttpContext context)
{
string productsKey = context.Request.QueryString("products");
string cacheKey = "Products_" + productsKey;
if (context.Cache[cacheKey] == null)
{
// lockObj declared on class level as
// private static readonly lockObj = new object();
lock(lockObj) {
if (context.Cache[cacheKey] == null)
{
using(StringWriter writer = new StringWriter())
{
var doc = getXml(productskey);
doc.Save(writer);
// Set caching options as required
context.Cache.Add(cacheKey, writer.GetStringBuilder().ToString(), null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(10));
}
}
}
context.Response.Write(context.Cache[cacheKey]);
return;
}
有关Cache类的详细信息,请参阅此link。