当前位置: 首页 > news >正文

凡客诚品购物网抖音seo培训

凡客诚品购物网,抖音seo培训,产品展示网站开发,去国外做非法网站前言 分享一些通过书籍和网络学到的知识 每次动态创建一个string,C#都会在堆内存分配一个内存用来分配字符串,因为C#没有对字符串的缓存机制,会导致每次连接、切割、组合的时候都会申请新的内存,并且抛弃原来的内存,等…

前言

分享一些通过书籍和网络学到的知识
每次动态创建一个string,C#都会在堆内存分配一个内存用来分配字符串,因为C#没有对字符串的缓存机制,会导致每次连接、切割、组合的时候都会申请新的内存,并且抛弃原来的内存,等待GC,而GC又会消耗很多CPU空间,例如对于a = “ax”; c = “b” + a + “c”,会造成一定程度的性能浪费。因为这里的+操作符是在运行时进行的,而不是在编译时。所以,每次+操作都会创建一个新的字符串对象,而不是改变原来的对象。这样就会产生两个无用的中间对象,“bax"和"baxc”,占用内存空间,如果不注意的话就会导致程序卡顿逐步增加,降低运行效率,有几种办法提高字符串效率,注意StringFormat和用+拼接还有$语法糖都会有一定效率问题,提高效率还是尽量用StringBuilder,但是为了可读性字符串比较短而且低频没必要的话就语法糖就好。

id-字符串字典池

自己建一个Key-字符串的缓存池,拼的时候从池子里面找减少GC
Dict<int,string>

Dictionary<int,string> strCache;
string strName = null;
if(!strCache.TryGetValue(id, out strName))
{
ResData resData = GetDataById(ID);
string strName = "This is " + resData,Name;
strCache.Add(id,strName);
}
return strName;

做一个定长的字符串池,用指针来拼接字符串

将指针指向目标字符串,把strA和strB分别拼在前置位和后置位,减少内存的分配和释放次数

public unsafe string Concat(string strA, string strB)  
{  int a_length = strA.Length;  int b_length = strB.Length;  int sum_length = a_length + b_length;  string strResult = null;  if (!cacheStr.TryGetValue(sum_length, out strResult))  // 如果不存在 sum_length 长度的缓存字符串,那么直接连接后存入缓存  {  strResult = strA + strB;        cacheStr.Add(sum_length, strResult);  return strResult;  }    //字符串再利用  fixed (char* strA_ptr = strA)  {        fixed (char* strB_ptr = strB)  {            fixed (char* strResult_ptr = strResult)  {                memcopy((byte*)strResult_ptr, (byte*)strA_ptr, a_length * sizeof(char));  memcopy((byte*)strResult_ptr+a_length,(byte*)strB_ptr,b_length * sizeof(char));  }        }    }    return strResult;  
}

memcopy函数

public unsafe void memcopy(byte* dest, byte* src, int len)  
{  while((--len)>=0)  {dest[len] = src[len];}}

StringBuilder

同样可以解决多次创建字符串反复拼接时候的GC问题,StringBuilder是可变的,也就是说它可以在原有的字符串上进行修改,而不需要创建新的字符串对象,这样可以节省内存空间和提高效率。StringBuilder支持链式调用,可以方便地进行多个字符串操作,例如builder.Append(“a”).Append(“b”).Append(“c”)。StringBuilder可以动态地调整其容量,当字符串长度超过当前容量时,它会自动扩展容量,而不会抛出异常。
缺点是tringBuilder是线程不安全的,也就是说在多线程环境下,如果多个线程同时对同一个StringBuilder对象进行修改,可能会导致数据不一致或者错误。StringBuilder的ToString方法需要遍历其内部的字符数组,将其拼接成一个新的字符串对象,这个过程可能会消耗一定的时间和资源。StringBuilder只会在toString时创建一次字符串,相比于之前的多次创建字符串给CPU性能压力减少很大。

http://www.shuangfujiaoyu.com/news/55012.html

相关文章:

  • 如何做动态网站html青岛网页搜索排名提升
  • 江苏优质网站制作公司搜索引擎营销的流程
  • 做网站需要哪个系统国内建站平台有哪些
  • 百度推广的渠道有哪些关键词优化排名怎么做
  • 网站怎么加关键词5118关键词查询工具
  • 用凡科做的网站要钱吗营业推广怎么写
  • 如何搜索公司所有的网站网络运营是做什么的
  • 哪里有南宁网站建设个人开发app去哪里接广告
  • python培训机构国外网站谷歌seo推广
  • 网站制作文章标签百度seo营销推广多少钱
  • 中国建设网站轨道自检验收报告表百度关键词搜索排名
  • 之路网站建设网站关键词排名优化推广软件
  • 天猫优惠券网站怎么做网络搜索工具
  • 重庆做网站的网络公司贴吧推广
  • 学做网站产品如何做网络推广
  • 经营性网站备案条件关键词有哪几种
  • 网站建设教学点上海最专业的seo公司
  • 学校网站建设板块分析seo提升关键词排名
  • 珠海科技网站建设人工智能培训一般多少钱
  • wordpress文章置顶插件baike seotl
  • 重庆建站模板源码百度推广怎么做步骤
  • 有没有做武棍的网站河北seo基础教程
  • 石家庄学做网站建设培训班网站为什么要做seo
  • 行业网站分类如何提高网站搜索排名
  • seo网络营销的技术seo线上培训机构
  • 怎么制作网站卖电子文件seo关键词推广话术
  • 网站建设 51下拉平台沈阳seo优化新势力
  • 六安网站建设价格免费网站制作教程
  • 园林设计网站大全整站seo排名要多少钱
  • 如何做团购网站中的美食地处地图功能永久免费的网站服务器有哪些软件