这个思路是从 一篇文章,关于《提升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. VC++分页打印实现

    VC++分页打印实现:  C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243 ...

  2. leetcode -- Unique Binary Search Trees todo

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  3. 自定义View总结

    写的很好,代你分析原码,关于 View Measure 测量机制,让我一次把话说完

  4. vue+webpack2实现路由的懒加载

    当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的异步组 ...

  5. Spring学习笔记 7.1 Spring MVC起步

    7.1.1 跟踪Spring MVC的请求请求首先到达DispatcherServlet(DispatcherServlet是Spring MVC中的前端控制器):DispatcherServlet的 ...

  6. Maven开发系统

    Maven的优点: 自动从互联网中获取jar包,并实现了一步构建. pom.xml的配置 依赖管理(导入对应的jar包) 通过坐标(定位到仓库中的包的位置,并将jar包导入到项目中,如果版本升级,只需 ...

  7. 转载 Mixed Content Page

    网站配置了https之后,网页上的百度地图无法正常显示,报错类似于: Mixed Content: The page at 'https://url_1' was loaded over HTTPS, ...

  8. Block Formatting Contexts (块级格式化上下文) 使用参考

    转自:http://kayosite.com/block-formatting-contexts-in-detail.html 在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ...

  9. (转)Java DecimalFormat 用法(数字格式化)

    我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是常用的例子: import java.tex ...

  10. Struts2+Spring3+MyBatis3整合以及Spring注解开发

     分类: Web(2)  版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在做一个SpringMVC+spring+MyBatis的项目,突然想起以前自己要搭建一个Struts2+Sprin ...