재우니의 블로그

이태원 참사에 대한 깊은 애도를 표합니다. 티스토리측에서도 공지했듯 이태원 참사 관련으로 콘텐츠를 생산하는분이 없기를 바랍니다.

반응형

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. 체크해 본다.


result


웹서비스에서 이를 사용하면 50% 데이터 압축 기능을 제공하여 빠른 속도로 바인딩을 해 준다.





반응형

댓글

비밀글모드