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?

  • 相关阅读:
    oracle 口令过期 解决
    powerdesginer script 脚本,生成数据模型
    ntp时间同步
    CentOS下安装JDK的三种方法
    linux安装jdk
    YUM仓库配置
    Shell编程
    RPM
    常用基本命令十二(crond系统定时任务)
    常用基本命令十一(后台服务管理)
  • 原文地址:https://www.cnblogs.com/shihao/p/2320677.html
Copyright © 2011-2022 走看看