理论教育 在编码过程中一定要注意优化方法调用代码

在编码过程中一定要注意优化方法调用代码

时间:2023-06-19 理论教育 版权反馈
【摘要】:因为方法的重要性,所以在编码过程中一定要注意优化方法的实现代码。使用虚拟优于使用接口假设你有一个HashMap对象,则可以声明它是一个HashMap或只是一个Map,下面是演示代码。使用静态优于使用虚拟如果没有必要去访问对象的外部,那么使我们的方法成为静态方法,它会被更快的调用,因为它不需要一个虚拟函数导向表。虚方法的调用会产生很多代价,比实例属性查询的代价要多。

在编码过程中一定要注意优化方法调用代码

在应用程序中,大多数功能是通过方法这一主体实现的。因为方法的重要性,所以在编码过程中一定要注意优化方法的实现代码。

(1)使用自身方法

当处理字符串的时候,要尽可能多的使用诸如String.indexOf()、String.lastIndexOf()等对象自身带有的方法。因为这些方法使用C/C++来实现的,要比在一个Java循环中做同样的事情快10~100倍。

(2)使用虚拟优于使用接口

假设你有一个HashMap对象,则可以声明它是一个HashMap或只是一个Map,下面是演示代码。

这样究竟哪一个更好呢?一般来说,明智的做法是使用Map,因为它能够允许我们改变Map接口执行上面的任何东西,但是这种“明智”的方法只是适用于常规的编程,对于嵌入式系统并不适合。相对于通过具体的引用进行虚拟函数的调用,通过接口引用来调用会花费两倍以上的时间。

如果选择使用HashMap,因为它更适合于我们的编程,那么如果使用Map会毫无价值。假设有一个能重构我们代码的集成编码环境,那么调用Map将没有任何用处,即使我们不确定程序从哪儿开始。同样,public的API是一个例外,一个好的API的价值往往大于执行效率上的损失。

(3)使用静态优于使用虚拟

如果没有必要去访问对象的外部,那么使我们的方法成为静态方法,它会被更快的调用,因为它不需要一个虚拟函数导向表。这同时也是一个很好的实践,因为它告诉我们如何区分方法的性质,调用这个方法不会改变对象的状态。

(4)尽可能避免使用内在的get、set方法(www.daowen.com)

像C++之类的编程语言,通常会使用get方法(例如“i=getCount()”)去取代直接访问这个属性。这在C++编程里面是一个很好的习惯,因为编译器会把访问方式设置为inline,并且如果想约束或调试属性访问,只需要在任何时候添加一些代码即可。

但是在Android编程中,这不是一个很不好的主意。虚方法的调用会产生很多代价,比实例属性查询的代价要多。我们应该在外部调用时使用get和set函数,但是在内部调用时,我们应该直接调用。

(5)要使用getBytes()

在将String转化成bytes过程中,不要使用getBytes()函数。例如,当我们在处理HTTP字符串时,在绝大多数情况下,它们都是ASCII码。getBytes()函数可以处理几乎所有字符的编码问题。但是这种能力在HTTP事务处理中似乎并不必要。因为你可以创建你自己的方法去处理仅仅一种ASCII码。

看下面的演示代码:

(6)尽量避免使用InetAddress.getHostAddress()函数

因为InetAddress.getHostAddress()函数包含了许多操作,所以它会生成许多中间字符串来返回主机地址,这大大增加了Android应用程序在时间上的负担。

(7)尽量避免使用DatagramPacket.getSocketAddress()函数

DatagramPacket.getSocketAddress()函数也包含了许多操作,调用时函数内部调用会尝试返回其主机名,增加了CPU的处理时间。如果仅仅只是要获得Android应用程序数据包的IP地址,可以用DatagramPacket.getAddress()函数来代替。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈