asp.net mvc web api 성능을 높이기 위해 압축 기능을 사용해 보자. 이를 사용하면 데이터량이 축소된다.
http://www.c-sharpcorner.com/article/compressing-web-api-response-to-using-dotnetzip/
A fork of the DotNetZip project without signing with a solution that compiles cleanly. This project aims to follow semver to avoid versioning conflicts. DotNetZip is a FAST, FREE class library and toolset for manipulating zip files. Use VB, C# or any .NET language to easily create, extract, or update zip files.
https://www.nuget.org/packages/DotNetZip/
1. 위의 사이트 접속하여 nuget 에서 설치한 후, 어트리뷰터를 만들어 본다.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Web;
using System.Web.Http.Filters;
namespace Webapi2
{
public class DeflateCompressionAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actContext)
{
var content = actContext.Response.Content;
var bytes = content == null ? null : content.ReadAsByteArrayAsync().Result;
var zlibbedContent = bytes == null ? new byte[0] :
CompressionHelper.DeflateByte(bytes);
actContext.Response.Content = new ByteArrayContent(zlibbedContent);
actContext.Response.Content.Headers.Remove("Content-Type");
actContext.Response.Content.Headers.Add("Content-encoding", "deflate");
actContext.Response.Content.Headers.Add("Content-Type","application/json");
base.OnActionExecuted(actContext);
}
}
public class CompressionHelper
{
public static byte[] DeflateByte(byte[] str)
{
if (str == null)
{
return null;
}
using (var output = new MemoryStream())
{
using (
var compressor = new Ionic.Zlib.GZipStream(
output, Ionic.Zlib.CompressionMode.Compress,
Ionic.Zlib.CompressionLevel.BestSpeed))
{
compressor.Write(str, 0, str.Length);
}
return output.ToArray();
}
}
}
}
2. 이를 컨트롤러에 적용해 본다. DeflateCompression 어트리뷰트를 넣으면 적용이 된다.
[HttpGet]
[Route("getData")]
[AllowAnonymous]
[DeflateCompression]
public async Task<IHttpActionResult> getData()
{
Stopwatch sw=new Stopwatch();
sw.Start();
Dictionary<object, object> dict = new Dictionary<object, object>();
List<Employee> li = new List<Employee>();
li.Add(new Employee {id="2",Name="Debendra",Id= "A123", Email="Debendra256@gmail.com"});
li.Add(new Employee { id = "3", Name = "Sumit", Id = "A124", Email = "Sumit@gmail.com" });
li.Add(new Employee { id = "4", Name = "Jayant", Id = "A125", Email = "jsyant@gmail.com" });
li.Add(new Employee { id = "5", Name = "Kumar", Id = "A126", Email = "KR@gmail.com" });
sw.Stop();
dict.Add("Details",li);
dict.Add("Time", sw.Elapsed);
return Ok(dict);
}
3. 체크해 본다.
웹서비스에서 이를 사용하면 50% 데이터 압축 기능을 제공하여 빠른 속도로 바인딩을 해 준다.