这个思路是从 一篇文章,关于《提升web api的性能》上看到的。自己实践了一番,写下步骤。

传统的DataReader是遵循这样的一个步骤:

While(reader.Read())

{

//创建对象,赋值,添加到集合

}

//返回Json.序列化(集合)

现在我们采用的是手工拼接Json字符串:通过解析DataReader的数据格式、内容,采用StringBuilder.Append这种方式进行手工拼接。

避免了每次初始化对象、序列化集合所带来的内存、时间上的消耗。在查询数据量很大集合时,很有帮助。

代码很简单,就不多做解释了

using System;
using System.Data.SqlClient;
using System.Text; namespace DataProvider.Common
{
public class Tools
{
/// <summary>
/// 将Reader集合转换成字符串
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static string ConvertReadersToJson(SqlDataReader reader)
{
var jsonStr = new StringBuilder();
jsonStr.Append("["); while (reader.Read())
{
ConvertSingleReaderToJson(reader, jsonStr);
jsonStr.Append(",");
} if (jsonStr.Length > )
{
jsonStr.Length = jsonStr.Length - ;
jsonStr.Append("]");
return jsonStr.ToString();
} return string.Empty;
} /// <summary>
/// 将一个Reader转换成Json字符串,reader必须可读.read
/// </summary>
/// <param name="reader"></param>
/// <param name="jsonStr"></param>
public static void ConvertSingleReaderToJson(SqlDataReader reader, StringBuilder jsonStr)
{
jsonStr.Append("{"); for (var i = ; i < reader.FieldCount; i++)
{
//值类型数据不需要引号,否则需要
var fieldType = reader.GetFieldType(i);
object fileValue = reader[i]; if (fieldType == typeof(DateTime))
{
DateTime dt = DateTime.MinValue; if (DateTime.TryParse(fileValue.ToString(), out dt))
{
fileValue = ConvertDateTimeToJson(dt);
}
}
//日期作为特殊情况已经处理过了
var comma = (fieldType == typeof(string) || fieldType == typeof(Guid)) ? "\"" : "";
jsonStr.AppendFormat("\"{0}\":{2}{1}{2},", reader.GetName(i), fileValue, comma);
}
//去掉多余的逗号
jsonStr.Length = jsonStr.Length - ;
jsonStr.Append("}");
} /// <summary>
/// 将.net 日期格式转换成Json日期格式
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string ConvertDateTimeToJson(DateTime dt)
{
DateTime d1 = new DateTime(, , );
DateTime d2 = dt.ToUniversalTime();
TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
return string.Format("\"/Date({0})/\"", ts.TotalMilliseconds.ToString("#"));
}
}
}

PS:另外。请教下各位朋友,如何去除Web Api默认托管的Json.net序列化框架,改用自己手工写Json呢?

也就是说,Controller传入、传出的对象是String类型,我自己来负责解析?

【web Api性能提升技巧】(2)从DataReader手工创建Json字符串的更多相关文章

  1. 8 种提升 ASP.NET Web API 性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  2. 六种简单方法提升ASP.NET Web API性能

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  3. 8种提升ASP.NET Web API性能的方法

    英文原文:8 ways to improve ASP.NET Web API performance ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没 ...

  4. [转载]8 种提升 ASP.NET Web API 性能的方法

    http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance 英文原文:8 ways to improve A ...

  5. 8 种提升 ASP.NET Web API 性能的方法 (转)

    出处:http://www.oschina.net/translate/8-ways-improve-asp-net-web-api-performance ASP.NET Web API 是非常棒的 ...

  6. 8 种提升ASP.NET Web API性能的方法

    ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web ...

  7. Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案

    Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案 1. 业务场景 android+webview h5 css背景图性能提升1 2. ...

  8. 使用Jil序列化JSON提升Asp.net web api 性能

    JSON序列化无疑是Asp.net web api 里面性能提升最重要的一环. 在Asp.net web api 里面我们可以插入自定义的MediaTypeFormatter(媒体格式化器), 说白了 ...

  9. Web 应用性能提升 10 倍的 10 个建议

    转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计 ...

随机推荐

  1. jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表

    对于问题从后台获取json数据,将内容填充到下拉列表,代码非常简单,具体过程请看下面代码. 需求:url:链接     par:ID       sel:下拉列表选择器 function BuildS ...

  2. gcc安装(centos)

    gcc 4.8 安装 [root@DS-VM-Node239 ~]# curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repo ...

  3. XCODE5 真机測试

    原文地址: http://my.oschina.net/u/1245365/blog/196420  亲測 可用 ios申请真机调试( xcode 5)具体解析 摘要 我们做ios项目时.模拟器仅仅能 ...

  4. 模拟http请求 带 chunked解析办法二

    以PHP代码为例 //这个是解析chuned块 get_chunk_data($fsock) { $data = ''; while(true) { $len = hexdec(fgets($fsoc ...

  5. HDU1536 S-Nim

    S-Nim Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  6. 【BZOJ4883】[Lydsy2017年5月月赛]棋盘上的守卫 KM算法

    [BZOJ4883][Lydsy2017年5月月赛]棋盘上的守卫 Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须 ...

  7. js 实现table表格拖拽和点击表头升降序排序

    js 实现table表格拖拽和点击表头升降序排序,写的比较乱,用的时候可以把其中的一些模块函数提取出来 样式,由于是可拖拽表格,所以样式 table tr th{cursor:move;} js实现 ...

  8. eslint常规语法检

    "no-alert": 0,//禁止使用alert confirm prompt "no-array-constructor": 2,//禁止使用数组构造器 & ...

  9. js 空正则匹配任意一个位置

    看一个正则 这里明显,起到匹配作用的是 | 后的,可 | 后什么都没有,原理不知道,也没有搜到文献,只有在 Reg101 上是这样解释的, 所以得出结论: js 中,空正则匹配任意一个位置. 不过,这 ...

  10. Win7环境下 IIS配置

    一.介绍IIS Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows ...