我创建了一个SQL的WebAPI界面,使用户的发展动态可以通过RESTful接口查询数据库。 它速度快于小型查询,但在较大的发挥作用有尤其是当多个同时通话是由严重滞后的问题。 我已经在这个运行性能分析和绝大多数处理的是上线完成:
var xe = reader.ReadOuterXml();
该客户期待XML文本字符串,所以我试着只是做一个ExecuteReader
但随后的结果在2033字节块回到这似乎是慢这是不幸的,因为运行在SQL Server Management Studio中(与此查询“FOR XML AUTO “)几乎是瞬间。
我与16MB的XML响应测试,但他们的反应是150MB的向上 - 200MB。
如何优化这个处理这些大的反应比较好? 代码如下:
public XElement AdHockSelect([FromBody] XElement valueElement, string connectionStringName, string database)
{
try
{
string rawConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
string sqlconnectionstring = string.Format(rawConnectionString, database);
using (SqlConnection sqlConnection = new SqlConnection(sqlconnectionstring))
{
string[] sqlComandTexts = valueElement.Value.Trim().Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
string sqlQueryText = "";
foreach (var sqlComandText in sqlComandTexts)
{
sqlQueryText += sqlComandText + " for xml auto;";
}
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(sqlQueryText, sqlConnection);
using (XmlReader reader = sqlCommand.ExecuteXmlReader())
{
XElement xd = new XElement(new XElement("Response"));
if (reader.EOF)
{
return XElement.Parse("<Response/>");
}
else
{
while (!reader.EOF)
{
if (reader.NodeType == XmlNodeType.Element)
{
var xe = reader.ReadOuterXml();
xd.Add(XElement.Parse(xe));
}
else
{
reader.Read();
}
}
return xd;
}
}
}
}