1楼真逗多几个子程序 程序就优化了
-------
减少不必要变量,和资源(比如能用如果真的不用如果,如果 条件 后面执行的2种命令 不要动不动就留白)。以及不必要命令
尽量用多线程,(遇到容易假死的命令才用 不然就是浪费计算机资源)
-------
多线程 注意内存溢出 基本上就这几点
案主要集中在
1 布局太深
淘宝、支付宝这个根本不算复杂布局,自己写个类似的布局就知道了,这么点层次根本不会有如此明显的卡顿 。
而且淘宝的卡顿不仅在页面加载时。
只要有过一两年开发经验的,知道界面卡顿只是表象,就能理解这个问题不是简单的界面渲染所致。
2 造成 GC
先搞清楚 young GC 和 full GC 的区别及耗时差异,我就问一个问题,大部分会被 young GC 还是 full GC 回收?
另外大多数缓存对 GC 的影响几乎没有区别,只要不和明显有内存泄露的写法对比。
对于目前的系统来说,young GC 的耗时对性能影响很小。
这两方面原因会有,但绝对不是主要的,甚至影响很小!!
说下我觉得主要的原因
1 任务过多且执行调度不够好
根据评论反馈解释下:这里的任务调度不是线程调度,是对所有任务执行时机、在哪个线程执行、最大并发数等的总称。毕竟系统资源(CPU、IO、网络等)有限、移动端更甚,主线程也有 ANR。
任务也包括很多,不列举,大家可以想想自己做过的大项目中的各种任务。
他们会发生在很多时刻,启动、页面跳转、按钮点击、定时任务等,绝大部分还是发生在我们看不见的后台。
至于为什么变成这样,我觉得有几方面原因
(1) 历史原因
老代码及设计的原因
(2) 业务太多
(3) 团队及成员太多
太多代码合并及插入。
(4) 个别程序员问题
个别人的渣代码
在为移动平台及多核芯片开发高性能软件时,人工智能技术可以发挥独特的作用,由IBM、欧盟等支持进行的MilePost研究项目在这方面做出了大胆的探索。 在软件开发过程中,程序代码的优化是一个基本的步骤。所有的程序员都希望他们编写的程序运行得更快、占用更少的资源。然而,当今CPU的架构非常复杂,进行处理器级的代码优化不仅复杂而且费时,所以一般的程序员根本做不了这项工作,必须依靠优化编译器还完成。经过这些编译器优化后的机器码简单而且高效,只有极少数的汇编语言大师可以与之媲美,因此,也没有必要在进行进一步的优化了。
但是,这里有个前提就是人们已经为该CPU架构开发出了一个非常好的优化编译器。一般而言,为当今主流的台式CPU找一个这样的编译器并不难,但是面对移动设备时就不是那么回事了。在嵌入式系统快速发展的今天,处理器架构变化太快了,编译器的设计和开发者们根本就跟不上这种变化。
一个有IBM研究院和欧盟支持的研究项目MilePost 找到了解决这一问题的办法。该项目的研究人员开发出了一个新的、实验性的GCC编译器,采用人工智能技术来提高代码的质量。这个项目的最终目标是让编译器的开发者在为某个指定的平台开发编译器时能够更容易,而解决办法则是让编译器能根据平台的不同自动对代码进行优化。这是一个听起来有些不可思议但很有吸引力的想法,也许会成为编译器的发展方向。
优化是一个学习的过程
就目前研究进展来看,MilePost不会指导程序员编写代码,也不会提供任何关于如何编写高效算法的建议,MilePost所做的是通过机器学习技术收集软件在性能方面的数据,然后对机器码进行响应的调整。
这是一个非常复杂的过程(如果你感兴趣,已经有很有学者发表了众多与此相关的论文),不过,从本质上说,其工作原理是通过分析源代码找出一些可能会用于优化的地方,比如涉及很多参数的子程序、多层嵌套的循环语句以及频繁使用的数学公式等。在MilePost对某个程序中所有可以优化的语句进行统计后,它再根据统计学原理决定哪些优化可以产生最佳结果,据此对编译后的代码进行针对性的调整。
这其实与这年来编译器的设计和研发人员在开发编译器时所做的工作基本一样,区别只是研发人员在做这件事情的时候更主观,很多时候,人们是在猜测那种优化方法可能更好。而MilePost能够基于统计数据进行上述决策,这些统计数据是代码在某种特定环境中运行时取得的。根据IBM进行的测试,与传统的编译器相比,MilePost编译后的代码性能能提高18%左右。
并不只是速度问题
有人也许会问,现如今CPU的运算速度越来越快,比如,有研究显示,大多数使用者连PC处理器的一半处理能力都没有用到,在这种情况下,还有必要进行这么低级别的代码优化?对台式CPU来说,情况也许的确是这样,但是对移动设备来说这种机器码级别的代码优化却是很有必要的。特别是当某个设备安装的是低能耗的CPU,而且其计算资源很有限的情况下,此时的代码优化就不是可做可不做,而是必须做的工作。
为移动设备开发软件的程序员常常要一次面对几种不同的平台,保证在每个平台运行的程序性能大体一致需要大量的代码优化工作。如果没有成熟的代码优化编译器,程序员只好人工进行代码的优化。这种代码优化工作有时可能需要几个月,既增加了开发成本同时也延误了产品上市时间。而一个具有机器学习能力的编译器可以自动根据每个平台的特点进行代码的优化,从而把程序员从复杂而且耗时的代码优化工作中解脱出来。
从长远来看,机器学习技术还能给编译器带来其他帮助。一个可能的应用领域就是是对在多核处理器上运行的代码进行优化。并行编程是当今软件开发领域最大的挑战之一,如果编译器通过机器学习能设法让代码自动并行运行,这对于整个软件领域将是一个巨大的贡献,同时对芯片制造商来说也是一个巨大的利好消息,因为可以解除它们设计多核芯片时的后顾之忧。
到目前为止,MilePost还只算是一个实验性的项目,感兴趣的人们可以从该项目的网站上下载源代码,编译它,自己进行试验,但还不能指望马上就可以在软件开发过程中真正使用。不过,无论如何,MilePost反应了下一代编译技术上的最新进展。对于那些关注软件效率,特别是为手持设备或其他嵌入式系统开发软件的人们来说,一定是值得关注的好消息。
时空交换,他比你要少用一些存储,但多一些步骤。
你们老师写的也不怎么样。n个数中移动m个的,应该只需要n+m个空间移动n+m次或0空间交换n次。他写成了nm次移动,你用了2n的空间。
如果你有13个空间,可以直接向后移动三个元素再重新插入。
次数等于n+m次。
#define N 10
#define M 3
for (int i = 0; i < N - M; ++i)
a[N + M - 1 + i] = a[N - 1 - i];
for (int i = 0; i < M; ++i)
a[M - 1 - i] = a[N + M - 1 + i];
如果没有空间,哪也是整体交换,只交换3+3+4次,相当于int(n / m) m + int(m / (n mod m))(n mod m)次等于n次。把q位上的n个数移动到p位上。
void swapall(int a[], int p, int q, int n)
{
for (int i = 0; i < n; i ++) {
int x = a[q + i];
a[q + i] = a[p + i];
a[p + i] = a[q + i];
}
}
/ p < q, n > 1 /
void move(int a[], int p, int q, int n) {
while ( p + n < q) {
swapall(a, p, q, n);
p = p + n;
}
while ( q - p < n) {
int m = q - p;
swapall (a, p, q, m);
n = n - m;
p = q;
q = p + m;
}
}
以上就是关于易语言 如何优化程序全部的内容,包括:易语言 如何优化程序、如何从程序优化的角度解释淘宝支付宝的安卓版卡顿、用人工智能自动优化程序代码_人工智能优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)