精华内容
下载资源
问答
  • 尽量不要在一个事务中实现过于复杂的查询或更新操作。...死锁是由于并发访问数据库资源造成的,减少死锁就应该限制应用系统的并发访问量。我们应该合理设置后台服务的线程数,将大量数据的操作分解,分步骤,分阶
    1.  尽量不要在一个事务中实现过于复杂的查询或更新操作。原因很简单,越是复杂的数据库操作,占用数据库资源的时间越长,引发死锁的可能性越大。

    2. 尽量不要在数据库事务中要求用户响应。原因同1,这也会导致事务长时间无法结束,浪费数据库资料。

    3. 死锁是由于并发访问数据库资源造成的,减少死锁就应该限制应用系统的并发访问量。我们应该合理设置后台服务的线程数,将大量数据的操作分解,分步骤,分阶段的执行。也应该避免在用户量大的时候大规模的进行后台数据库操作,应该将大规模的数据库操作放在用户量最少的时候进行。

    4. 尽可能以分区表或分区视图的方式拆分包含大量数据的表,将它们保存在不同的物量磁盘和文件组中。在访问数据时,可以分散访问保存在不同分区的数据,从而减少因为在大型表中放置锁而造成其它事务长时间等待的概率。

    5. 尽量避免使用占用很长的复杂查询,在条件允许的情况下应该尽量使用分页查询或缩小结果集的方式。因为复杂查询会长时间占用数据库资源,增加发生死锁的概率。

    6. 尽可能使用较低的隔离级别,如READ UNCOMMITTED,因为隔离级别低时,事务之间相互等待的情况会减少,这样每个事务都会尽可能快地完成数据库操作,然后释放其拥有的锁资源,这样就会降低出现锁等待或死锁的概率。当然,用户在设计数据库应用程序时,需要考虑如何解决事务中数据不一致的情况。

    7. 应该注意统一访问表的顺序,尽量避免有的事务先查询表A然后更新表B,而有的事务先查询表B再更新表A的情况。

    8. 如果一个事务中只进行读取数据的操作,则可以在该事务中使用快照(SNAPSHOT)隔离级别。因为在快照隔离级别中,数据库引擎不会阻塞其他事务对当前事务所占用资源的修改操作,当前事务会认为它所拥有的资源没有被修改过(实际上它所拥有的资源是一个快照)。这样就可以减少因为等待资源而产生死锁的情况。 

    展开全文
  • 这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。 怎样开启GPU过度绘制调试工具? 1....
    展开全文
  • 这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。 怎样开启GPU过度绘制调试工具? 1...

    什么是过度绘制(OverDraw)


    在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。

    怎样开启GPU过度绘制调试工具?

    1.点击进入“设置”;
    2.点击进入“开发者选项”
    3.选中“调试GPU过度绘制”
    4.选中“显示过度绘制区域”

    此时,你会注意到屏幕的颜色变化了,别紧张。切换到你的应用,现在我们开始了解怎么通过改善布局来解决过度绘制问题。

    屏幕上不同的颜色代表着什么?

    1.原色 – 没有被过度绘制 – 这部分的像素点只在屏幕上绘制了一次。
    2.蓝色 – 1次过度绘制– 这部分的像素点只在屏幕上绘制了两次。
    3.绿色 – 2次过度绘制 – 这部分的像素点只在屏幕上绘制了三次。
    4.粉色 – 3次过度绘制 – 这部分的像素点只在屏幕上绘制了四次。
    5.红色 – 4次过度绘制 – 这部分的像素点只在屏幕上绘制了五次。

    怎么解决应用过度绘制?

    由上面的知识,我们知道要解决过度绘制。即是要尽量减少屏幕上的红色区域,增加屏幕上的蓝色和绿色区域。我们的目标是要控制界面最多被过度绘制2次(不出现粉色和红色)。

    1.合理选择控件容器
    既然overdraw是因为重复绘制了同一片区域的像素点,那我们首先想到的是解决布局问题。Android提供的Layout控件主要包括LinearLayout、TableLayout、FrameLayout、RelativeLayout(这里我们不考虑AbsoluteLayout)。同一个界面我们可以使用不同的容器控件来表达,但是各个容器控件描述界面的复杂度是不一样的。一般来说LinearLayout最易,RelativeLayout较复杂。但是尺有所短,寸有所长,LinearLayout只能用来描述一个方向上连续排列的控件,容易导致布局文件嵌套太深,不符合布局扁平化的设计原理。而RelativeLayout几乎可以用于描述任意复杂度的界面。但是表达能力越强的容器控件,性能往往略低一些,因为RelativeLayout主要在onMeasure和onLayout阶段会耗费更多时间。综上所述:LinearLayout易用,效率高,表达能力有限。RelativeLayout复杂,表达能力强,但是效率稍逊。所以当某一界面在使用LinearLayout并不会比RelativeLayout带来更多的控件数和控件层级时,我们要优先考虑LinearLayout。但是要根据实际情况来做一个取舍,在保证性能的同时尽量避免OverDraw。


    2.去掉window的默认背景
    当我们使用了Android自带的一些主题时,window会被默认添加一个纯色的背景,这个背景是被DecorView持有的。当我们的自定义布局时又添加了一张背景图或者设置背景色,那么DecorView的background此时对我们来说是无用的,但是它会产生一次Overdraw,带来绘制性能损耗。去掉window的背景可以在onCreate()中setContentView()之后调用
    getWindow().setBackgroundDrawable(null);

    或者在theme中添加
    android:windowbackground="null";


    3.去掉其他不必要的背景
    有时候为了方便会先给Layout设置一个整体的背景,再给子View设置背景,这里也会造成重叠,如果子View宽度mach_parent,可以看到完全覆盖了Layout的一部分,这里就可以通过分别设置背景来减少重绘。再比如如果采用的是selector的背景,将normal状态的color设置为“@android:color/transparent",也同样可以解决问题。这里只简单举两个例子,我们在开发过程中的一些习惯性思维定式会带来不经意的Overdraw,所以开发过程中我们为某个View或者ViewGroup设置背景的时候,先思考下是否真的有必要,或者思考下这个背景能不能分段设置在子View上,而不是图方便直接设置在根View上。


    4.ClipRect & QuickReject
    为了解决Overdraw的问题,Android系统会通过避免绘制那些完全不可见的组件来尽量减少消耗。但是不幸的是,对于那些过于复杂的自定义的View(通常重写了onDraw方法),Android系统无法检测在onDraw里面具体会执行什么操作,系统无法监控并自动优化,也就无法避免Overdraw了。但是我们可以通过canvas.clipRect()来帮助系统识别那些可见的区域。这个方法可以指定一块矩形区域,只有在这个区域内才会被绘制,其他的区域会被忽视。这个API可以很好的帮助那些有多组重叠组件的自定义View来控制显示的区域。同时clipRect方法还可以帮助节约CPU与GPU资源,在clipRect区域之外的绘制指令都不会被执行,那些部分内容在矩形区域内的组件,仍然会得到绘制。除了clipRect方法之外,我们还可以使用canvas.quickreject()来判断是否没和某个矩形相交,从而跳过那些非矩形区域内的绘制操作。
    clip方法详解


    5.使用ViewStub占位
    ViewStub是个什么东西?一句话总结:高效占位符。我们经常会遇到这样的情况,运行时动态根据条件来决定显示哪个View或布局。常用的做法是把View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。可以为ViewStub指定一个布局,在Inflate布局的时候,只有ViewStub会被初始化,然后当ViewStub被设置为可见的时候,或是调用了ViewStub.inflate()的时候,ViewStub所向的布局就会被Inflate和实例化,然后ViewStub的布局属性都会传给它所指向的布局。这样,就可以使用ViewStub来方便的在运行时,要还是不要显示某个布局。

    当你想加载布局时,可以使用下面其中一种方法:


    6.用Merge减少布局深度
    Merge标签有什么用呢?简单粗暴点回答:干掉一个view层级。Merge的作用很明显,但是也有一些使用条件的限制。有两种情况下我们可以使用Merge标签来做容器控件。第一种子视图不需要指定任何针对父视图的布局属性,就是说父容器仅仅是个容器,子视图只需要直接添加到父视图上用于显示就行。另外一种是假如需要在LinearLayout里面嵌入一个布局(或者视图),而恰恰这个布局(或者视图)的根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度。而这个时候如果我们使用merge根标签就可以避免那样的问题。另外Merge只能作为XML布局的根标签使用,当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。
    使用HierarchyViewer检查布局层级


    7.善用draw9patch
    给ImageView加一个边框,你肯定遇到过这种需求,通常在ImageView后面设置一张背景图,露出边框便完美解决问题,此时这个ImageView,设置了两层drawable,底下一层仅仅是为了作为图片的边框而已。但是两层drawable的重叠区域去绘制了两次,导致overdraw。优化方案: 将背景drawable制作成draw9patch,并且将和前景重叠的部分设置为透明。由于Android的2D渲染器会优化draw9patch中的透明区域,从而优化了这次overdraw。 但是背景图片必须制作成draw9patch才行,因为Android 2D渲染器只对draw9patch有这个优化,否则,一张普通的Png,就算你把中间的部分设置成透明,也不会减少这次overdraw。


    8.慎用Alpha
    假如对一个View做Alpha转化,需要先将View绘制出来,然后做Alpha转化,最后将转换后的效果绘制在界面上。通俗点说,做Alpha转化就需要对当前View绘制两遍,可想而知,绘制效率会大打折扣,耗时会翻倍,所以Alpha还是慎用。如果一定做Alpha转化的话,可以采用缓存的方式。

    通过setLayerType方式可以将当前界面缓存在GPU中,这样不需要每次绘制原始界面,但是GPU内存是相当宝贵的,所以用完要马上释放掉。


    9.避免“OverDesign”
    overdraw会给APP带来不好的体验,overdraw产生的原因无外乎:复杂的Layout层级,重叠的View,重叠的背景这几种。开发人员无节制的View堆砌,究其根本无非是产品无节制的需求设计。有道是“由俭入奢易,由奢入俭难",很多APP披着过度设计的华丽外衣,却忘了简单易用才是王道的本质,纷繁复杂的设计并不会给用户带来好的体验,反而会让用户有压迫感,产品本身也有可能因此变得卡顿。当然,一切抛开业务谈优化都是空中楼阁,这就需要产品设计也要有一个权衡,在复杂的业务逻辑与简单易用的界面展现中做一个平衡,而不是一味的OverDesign。

    展开全文
  • 一句话总结:连接数据库,这样就保证了和数据之间只有一个连接,从而能够不占用多余资源,这样就极大的减少资源浪费减少了mysql或者说服务器压力 1、单例模式的思路是怎样的? 如果有实例,就拿实例,没有就...

    Dcloud课程7 单例模式一般用在什么场景

    一、总结

    一句话总结:连接数据库,这样就保证了和数据之间只有一个连接,从而能够不占用多余资源,这样就极大的减少了资源浪费,减少了mysql或者说服务器压力

     

    1、单例模式的思路是怎样的?

    如果有实例,就拿实例,没有就创建实例,不允许外部创建实例

    16     public static function getInstance(){
    17         if (!self::$_instance instanceof self) {
    18             # code...
    19             self::$_instance=new self;
    20         }
    21         
    22         return self::$_instance;
    23     }

     

    2、php函数默认参数用false好还是用null好?

    其实都可以,感觉用null要好,语义,判断是否用false,参数是数据的话就是null

     

    3、静态缓存数据技术中为什么会用到定时任务?

    定时把数据的数据弄到缓存中,也就是静态文件中,这样就可以保证用户一直在文件中读取最新数据,而不用连接数据库。

     

     

     

    二、单例模式一般用在什么场景

    1、相关知识

    单例模式的基本原则

    1)构造函数需要标记为非public(防止外部使
    用new操作符创建对象),单例类不能在其他类中实
    例化,只能被其自身实例化。
    2)拥有一个保存类的实例的静态成员变量
    $_instance。
    3)拥有一个访问这个实例的公告的静态方法

     

    首页接口开发方法

    1)读取数据库方式开发首页接口

    2)读取缓存方式开发首页接口

    优势:减少数据库压力

    3)定时的读取缓存方式开发首页接口

     

    首页接口的流程

     

     
     
     

    2、代码

     1 <?php 
     2 
     3 class DB{
     4     const HOST='localhost';
     5     const USER='root';
     6     const PASS='123';
     7     const DATA='feifei';
     8     static public $_instance;
     9 
    10     private function __construct(){
    11         @mysql_connect(DB::HOST,DB::USER,DB::PASS);
    12         mysql_set_charset('utf8');
    13         mysql_select_db(DB::DATA);
    14     }
    15 
    16     public static function getInstance(){
    17         if (!self::$_instance instanceof self) {
    18             # code...
    19             self::$_instance=new self;
    20         }
    21         
    22         return self::$_instance;
    23     }
    24 }
    25 
    26 // $model=new DB();
    27 
    28 // $model=DB::getInstance();
    29 
    30 // $sql="select * from user";
    31 // $res=mysql_query($sql);
    32 // while ($row=mysql_fetch_assoc($res)) {
    33 //     # code...
    34 //     var_dump($row);
    35 // }
    36 
    37 
    38 
    39 
    40  ?>

     

     

     

     

    转载于:https://www.cnblogs.com/Renyi-Fan/p/9328424.html

    展开全文
  •  地球的树木一天天在减少,白色污染在慢慢扩大,人类浪费水浪费电浪费纸,人类大量使用一次性碗筷,使白色污染增多了,不仅仅是白色污染增加了很多,浪费资源也有很多,有许多人吃饭前洗手后水龙头没有关紧,人们...
  • 华天谋5s管理专家概述:办公室5S管理的目的是为营造干净整洁的办公场所,合理配置,使用各种资源减少浪费,降低办公成本,激发工作热情,提高工作效率,塑造良好的部门形象。下面分享办公室5s标准样板,供企业推行...
  • 探讨IP子网划分

    2008-09-17 21:54:00
    划分IP子网,有利于我们搞好系统维护,合理配置系统资源减少资源浪费,但我们有很多初入此道的网管们对怎样做好这一项必修课心中没底,这里,我们就一个实例来讲讲子网划分的具体方法,希望对广大朋友有所帮助。...
  • android 过度绘制

    2017-08-17 19:04:02
    原文: Android性能优化之减少...这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。 怎样
  • 在当今的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦、浪费时间的。NHibernate是一个面向.NET环境的对象/关系数据库映射工具。对象/关系数据库映射(object/relational mapping (ORM))这个术语...
  • 1.4.3 Oracle DBA的资源和组织 10 1.4.4 Oracle示例 11 1.4.5 Oracle数据库的两天DBA课程 11 1.4.6 Oracle MetaLink 11 1.4.7 Oracle Web Conference 12 1.5 普通Oracle DBA的日常工作 12 1.6 几点...
  • 其次列为综合课程,因为它把各门职能课程结合在一起,不仅阐明了各种职能在企业争取达到经营目标的过程中如何相互作用,而且指出了企业与其所处的环境怎样互相影响。 表2.1.2 企业管理学的学科分类 ────...
  • 如果问题没有可行的解决,那么花费在这项开发工程上的任何时间、资源、人力和经费都是无谓的浪费。 对于软件设计而言,可行性研究是尤其重要的,即在开发软件之前.用很小的代价在尽可能短的时间内确定问题是否可以...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    C#--微软.NET的第一语言 本书着重介绍语言本身,比较少涉及应用,不错的入门书,从头讲起,不怕不明白。 <<page 1>> page begin==================== 目 目目 目 录 ... 比尔.... 2000 年 6 月 ...
  • 13.1.2 减少管理负担 502 13.1.3 改善语句性能 505 13.2 表分区机制 507 13.2.1 区间分区 508 13.2.2 散列分区 510 13.2.3 列表分区 513 13.2.4 间隔分区 515 13.2.5 引用分区 520 13.2.6 组合分区 524 ...
  • C#微软培训资料

    2014-01-22 14:10:17
    <<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...
  • 重新认识Angular

    2020-12-26 19:07:05
    甚至是它又依赖了怎样的其他服务,都不需要关注。 <pre><code> javascript // 可注入的服务 () export class NameService { getName() { return Name; } changeName(name) { Name = name; } } </code></...
  • 13.1.2 减少管理负担 564 13.1.3 改善语句性能 569 13.2 表分区机制 571 13.2.1 区间分区 571 13.2.2 散列分区 574 13.2.3 列表分区 579 13.2.4 组合分区 581 13.2.5 行移动 583 13.2.6 表分区机制小结 585...
  • 疯狂的程序员

    热门讨论 2012-07-18 18:05:32
    那男人教绝影怎样做“程序员”,报酬是每节课60块钱,一节课是45分钟。谈到钱的事情,大家都有点不快乐。绝影一周的生活费是100元,而那男人却反复说,当年我上一节课是80块钱。“知道不,程序员的课,都是高级课,...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

怎样减少浪费资源