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

做自媒体可以搬运国外网站新闻吗免费咨询律师的电话是多少

做自媒体可以搬运国外网站新闻吗,免费咨询律师的电话是多少,网站推广投放,合肥网站关键词排名如果说要对一个站点或者应用程序经常优化#xff0c;可以说缓存的使用是最快也是效果最明显的方式。一般而言#xff0c;我们会把一些常用的#xff0c;或者需要花费大量的资源或时间而产生的数据缓存起来#xff0c;使得后续的使用更加快速。 如果真要细说缓存的好处…如果说要对一个站点或者应用程序经常优化可以说缓存的使用是最快也是效果最明显的方式。一般而言我们会把一些常用的或者需要花费大量的资源或时间而产生的数据缓存起来使得后续的使用更加快速。   如果真要细说缓存的好处还真是不少但是在实际的应用中很多时候使用缓存的时候总是那么的不尽人意。换句话说假设本来采用缓存可以使得性能提升为100这里的数字只是一个计量符号而已只是为了给大家一个“量”的体会但是很多时候提升的效果只有80,70或者更少甚至还会导致性能严重的下降这个现象在使用分布式缓存的时候尤为突出。   在本篇文章中我们将为大家讲述导致以上问题的9大症结并且给出相对应的解决方案。文章以.NET为例子进行代码的演示对于来及其他技术平台的朋友也是有参考价值的只要替换相对应的代码就行了   为了使得后文的阐述更加的方便也使得文章更为的完整我们首先来看看缓存的两种形式本地内存缓存分布式缓存。   首先对于本地内存缓存就是把数据缓存在本机的内存中如下图1所示   从上图中可以很清楚的看出 应用程序把数据缓存在本机的内存需要的时候直接去本机内存进行获取。 对于.NET的应用而言在获取缓存中的数据的时候是通过对象的引用去内存中查找数据对象的也就说如果我们通过引用获取了数据对象之后我们直接修改这个对象其实我们真正的是在修改处于内存中的那个缓存对象。  对于分布式的缓存此时因为缓存的数据是放在缓存服务器中的或者说此时应用程序需要跨进程的去访问分布式缓存服务器如图2   不管缓存服务器在哪里因为涉及到了跨进程甚至是跨域访问缓存数据那么缓存数据在发送到缓存服务器之前就要先被序列化当要用缓存数据的时候应用程序服务器接收到了序列化的数据之后会将之反序列化。序列化与反序列化的过程是非常消耗CPU的操作很多问题就出现在这上面。   另外如果我们把获取到的数据在应用程序中进行了修改此时缓存服务器中的原先的数据是没有修改的除非我们再次将数据保存到缓存服务器。请注意这一点和之前的本地内存缓存是不一样的。   对于缓存中的每一份数据为了后文的讲述方面我们称之为“缓存项“。   普及完了这两个概念之后我们就进入今天的主题使用缓存常见的9大误区 太过于依赖.NET默认的序列化机制 缓存大对象 使用缓存机制在线程间进行数据的共享 认为调用缓存API之后数据会被立刻缓存起来 缓存大量的数据集合而读取其中一部分 缓存大量具有图结构的对象导致内存浪费 缓存应用程序的配置信息 使用很多不同的键指向相同的缓存项 没有及时的更新或者删除再缓存中已经过期或者失效的数据  下面我们就每一点来具体的看看 太过于依赖.NET默认的序列化机制   当我们在应用中使用跨进程的缓存机制例如分布式缓存memcached或者微软的AppFabric此时数据被缓存在应用程序之外的进程中。每次当我们要把一些数据缓存起来的时候缓存的API就会把数据首先序列化为字节的形式然后把这些字节发送给缓存服务器去保存。同理当我们在应用中要再次使用缓存的数据的时候缓存服务器就会将缓存的字节发送给应用程序而缓存的客户端类库接受到这些字节之后就要进行反序列化的操作了将之转换为我们需要的数据对象。   另外还有三点需要注意的就是 这个序列化与反序列化的机制都是发生在应用程序服务器上的而缓存服务器只是负责保存而已。 .NET中的默认使用的序列化机制不是最优的因为它要使用反射机制而反射机制是是非常耗CPU的特别是当我们缓存了比较复杂的数据对象的时候。  基于这个问题我们要自己选择一个比较好的序列化方法来尽可能的减少对CPU的使用。常用的方法就是让对象自己来实现ISerializable接口。   首先我们来看看默认的序列化机制是怎么样的。如图3   然后我们自己来实现ISerializable接口如下图4所示   我们自己实现的方式与.NET默认的序列化机制的最大区别在于没有使用反射。自己实现的这种方式速度可以是默认机制的上百倍。   可能有人认为没有什么不就是一个小小的序列化而已有必要小题大做么   在开发一个高性能应用例如网站而言从架构到代码的编写以及后面的部署每一个地方都需要优化。一个小问题例如这个序列化的问题初看起来不是问题如果我们站点应用的访问量是百万千万甚至更高级别的而这些访问需要去获取一些公共的缓存的数据这个之前所谓的小问题就不小了   下面我们来看第二个误区。 缓存大对象   有时候我们想要把一些大对象缓存起来因为产生一次大对象的代价很大我们需要产生一次尽可能的多次使用从而提升响应。   提到大对象这里就很有必要对其进行一个比较深入的介绍了。在.NET中所谓的大对象就是指的其占用的内存大于了85K的对象下面通过一个比较将问题说清楚。   如果现在有一个Person类的集合定义为ListPerson每个Person对象占用1K的内存如果这个Person集合中包含了100个Person对象实例那么这个集合是否是大对象呢   回答是不是   因为集合中只是包含的Person对象实例的引用而言即在.NET的托管堆上面这个Person集合分配的内存大小也就是100个引用的大小而言。   然后对于下面的这个对象就是大对象了: byte[] data new byte[87040]85 * 1024 87040。   说到了这里那就就谈谈为什么说产生一次大对象的代价很大。   因为在.NET中大对象是分配在大对象托管堆上面的我们简称为“大堆”当然还有一个对应的小堆而这个大堆上面的对象的分配机制和小堆不一样大堆在分配的时候总是去需找合适的内存空间结果就是导致出现内存碎片导致内存不足我们用一个图来描述一下如图5所示   上图非常明了在图5中 垃圾回收机制不会在回收对象之后压缩大堆小堆是压缩的。 分配对象的时候需要去遍历大堆去需找合适的空间遍历是要花成本的。 如果某些空间小于85K那么就不能分配了只能白白浪费也导致内存碎片。  讲完了这些之后我们言归正传来看看大对象的缓存。   正如之前讲过将对象缓存和读取的时候是要进行序列化与反序列化的缓存的对象越大例如有1M等整个过程中就消耗更多的CPU。   对于这样的大对象要看它使用的是否很频繁是否是公用的数据对象还是每个用户都要产生的。因为我们一旦缓存了特别在分布式缓存中就需要同时消耗缓存服务器的内存与应用程序服务器的CPU。如果使用的不频繁建议每次生成如果是公用的数据那么建议多多的测试将生产大对象的成本与缓存它的时候消耗的内存和CPU的成本进行比较选择成本小的如果是每个用户都要产生的看看是否可以分解如果实在不能分解那么缓存但是及时的释放 使用缓存机制在线程间进行数据的共享   当数据放在缓存中的时候我们程序的多个线程都可以访问这个公共的区域。多个线程在访问缓存数据的时候会产生一些竞争这也是多线程中常常发生的问题。   下面我们分别从本地内存缓存与分布式缓存两个方面介绍竞争的带来的问题。   看下面的一段代码   对于本地内存缓存对于上面的代码当这个三个线程运行起来之后在线程1中item的值很多时候可能为1线程2可能是2线程3可能是3。当然这不一定只是大多数情况下的可能值   如果是对于分布式缓存就不好说了因为数据的修改不是立刻发生在本机的内存中的而是经过了一个跨进程的过程。   有一些缓存模块已经实现了加锁的方式来解决这个问题例如AppFabric。大家在修改缓存数据的时候要特别注意这一点。 认为调用缓存API之后数据会被立刻缓存起来   有时候当我们调用了缓存的API之后我们就会认为数据已经被换成了之后就可以直接读取缓存中的数据。尽管情况很多时候如此但是不是绝对的很多的问题就是这样产生的   我们通过一个例子来讲解。   例如对于一个ASP.NET 应用而言如果我们在一个按钮的Click事件中调用了缓存API然后在页面呈现的时候就去读取缓存代码如下   上面的代码照道理来说是对的但是会发生问题。按钮点击之后回传页面然后呈现页面的时候显示数据流程没有问题。但是没有考虑到这样一个问题如果服务器的内存紧张而导致进行服务器内存的回收那么很有可能缓存的数据就没有了   这里有朋友就要说了内存回收这么快   这主要看我们的一些设置和处理。   一般而言缓存机制都是会设置绝对过期时间与相对过期时间二者的区别大家应很清楚我这里不多说。对于上面的代码而言如果我们设置的是绝对过期时间假设1分钟如果页面处理的非常慢时间超过了1分钟那么等到呈现的时候可能缓存中的数据已经没有了   有时候即使我们在第一行代码中缓存了数据那么也许在第三行代码中我们去缓存读取数据的时候就已经没有了。这或许是因为在服务器内存压力很大的缓存机制将最少访问的数据直接清掉。或者服务器CPU很忙网络也不好导致数据没有被即使的序列化保存到缓存服务器中。   另外对于ASP.NET而言如果使用了本地内存缓存那么还涉及到IIS的配置问题对缓存内存的限制我们有机会专门为大家分享这方面的知识。   所以每次在使用缓存数据的时候要判断是否存在不然会有很多的“找不到对象”的错误产生一些我们认为的“奇怪而又合理的现象”。 关于作者   汪洋现任惠普架构师、信息分析师《NET应用架构设计模式、原则与实践》作者。上海益思研发管理咨询有限公司首席软件架构专家软件咨询组副组长。转载于:https://www.cnblogs.com/xu-xiang/p/5890528.html
http://www.zqtcl.cn/news/208838/

相关文章:

  • 深圳做网站哪个公司好重庆工程造价信息2021
  • 做电商宠物带哪个网站最好最近一周的重大新闻
  • 做网站难度李沧网站建设电话
  • 六安建设网站网站图片最大尺寸是多少
  • 手机建网站步骤软件优速网站建设
  • 导购网站如何做免费推广用wordpress开发网站模板
  • 建立网站 英语wordpress字体加载
  • 株洲网站建设和制作wordpress 瑞课教育
  • 网站开发培训什么淘宝客网站备案
  • 提供网站制作公司用虚拟机做服务器搭建网站
  • 做煤层气的网站仅对wordpress自带主题有效
  • 优化网站关键词排名东莞网站设计报价
  • 建设厅网站总经济师是干什么的网络运营商电话
  • mvc5 网站开发之美专业企业建站价格
  • 水果电子商务网站建设规划书ipad做网站服务器
  • 网站模版自适应安卓软件开发培训
  • 网络网站建设10大指标开店装修话做那个网站找工人
  • dedecms网站的下载济南网站忧化
  • 深圳北站设计者亚洲国产中文域名查询
  • 有好的学网站建设的书吗龙岗网站建设服务
  • 建个注册页面网站做网站坚持多少年会有起色
  • 做网站是什么职位工商局网站查询入口
  • 做腰椎核磁证网站是 收 七如何做个盈利的网站
  • wordpress查看站点购物网站的后台做哪些东西
  • 文化馆为何需要建设自己的网站网站的建设教程
  • o2o网站策划京北网app下载
  • 公众号链接电影网站怎么做禁止wordpress保存修订版
  • 免费网站建设排行网站开发需要注册账户吗
  • 深圳营销网站建设免费网站添加站长统计
  • 建设银行网站怎么能转账代理ip注册网站都通不过