zoukankan      html  css  js  c++  java
  • Stupid smart code

    We had the following code:

    public static void WriteDataToRequest(HttpWebRequest req, string data) {     var byteArray = Encoding.UTF8.GetBytes(data);      req.ContentLength = byteArray.Length;      using (var dataStream = req.GetRequestStream())     {         dataStream.Write(byteArray, 0, byteArray.Length);         dataStream.Flush();     } }

    And that is a problem, because it allocates the memory twice, once for the string, once for the buffer. I changed that to this:

    public static void WriteDataToRequest(HttpWebRequest req, string data) {     var byteCount = Encoding.UTF8.GetByteCount(data);     req.ContentLength = byteCount;     using (var dataStream = req.GetRequestStream())     {         if(byteCount <= 0x1000) // small size, just let the system allocate it         {             var bytes = Encoding.UTF8.GetBytes(data);             dataStream.Write(bytes, 0, bytes.Length);             dataStream.Flush();             return;         }          var buffer = new byte[0x1000];         var maxCharsThatCanFitInBuffer = buffer.Length / Encoding.UTF8.GetMaxByteCount(1);         var charBuffer = new char[maxCharsThatCanFitInBuffer];         int start = 0;         var encoder = Encoding.UTF8.GetEncoder();         while (start < data.Length)         {             var charCount = Math.Min(charBuffer.Length, data.Length - start);              data.CopyTo(start, charBuffer, 0, charCount);             var bytes = encoder.GetBytes(charBuffer, 0, charCount, buffer, 0, false);             dataStream.Write(buffer, 0, bytes);             start += charCount;         }         dataStream.Flush();     } } 

    And I was quite proud of myself.

    Then I realized that I was stupid. Why?

  • 相关阅读:
    位运算符设置权限
    urlencode、urldecode、rawurlencode、rawurldecod
    二分查找法的mid值 整数溢出问题
    GIT 常用命令
    nginx配置反向代理转发
    PHP实现无限极分类
    PHP面试题目整理(持续更新)
    去除input的默认样式
    git 常用指令
    数组去重
  • 原文地址:https://www.cnblogs.com/shihao/p/2320677.html
Copyright © 2011-2022 走看看