繁体   English   中英

将HttpResponseMessage内容设置为字符串和JSON文件之间是否有性能差异?

[英]Is there any performance difference between setting HttpResponseMessage content as string and as JSON file?

我正在尝试使用以下序列化大对象。 但是有时会抛出内存不足异常。

方法1:

            var settings = new JsonSerializerSettings { ContractResolver = BaseFirstContractResolver.Instance };
           string jsonString = JsonConvert.SerializeObject(listObj, Newtonsoft.Json.Formatting.Indented, settings);

所以我决定将对象序列化为文件,如下所示,

方法2:

            string path = System.Web.Configuration.WebConfigurationManager.AppSettings["jsonPath"].ToString();
            using (StreamWriter file = File.CreateText(path))
            {
                JsonSerializer serializer = new JsonSerializer();
                serializer.Serialize(file, listObj);
            }
        }

我也从HttpResponseMessage从文件返回json数据,

string path = System.Web.Configuration.WebConfigurationManager.AppSettings["jsonPath"].ToString();
                var stream = new System.IO.FileStream(path, System.IO.FileMode.Open);
                var response = this.Request.CreateResponse(HttpStatusCode.OK);
                response.Content = new StreamContent(stream);
                response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
                return response;

我在方法1中比在方法2中更快地获取数据。这两种方法之间是否存在性能差异?

第一种方法是使用内存,第二种方法是写入磁盘,然后再次从磁盘读取。 第一种方法将始终更快,但是会占用更多内存。 性能上的差异将在很大程度上取决于内存和磁盘的IO速度。 我个人不惜一切代价避免使用方法2。 如果对象是某种类型的集合,我将在方法1上实现分页。 如果我被迫在一个请求中发送整个集合,则对集合的大块使用yield返回。 这将创建分块的传输编码流。 如果该对象确实只是一个巨大的单个对象,则将需要某种类型的流解串器以再次对分块的传输编码流进行处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM