程序代码开发中怎样才能提高我们的开发效率呢?

程序代码开发中怎样才能提高我们的开发效率呢?,第1张

提高开发效率可以从以下几个方面进行学习。

首先多多学习开源项目,分析别人的代码架构,吸取对方优秀的编程思想,理解后下次开发用上

第二:记住系统提供给我们的快速开发的方法,常用的方法都有日期函数字符串函数,文件函数等,比如下面的函数:

一个不透明的结构, 它指向一条线程并间接(通过该线程)引用了整个 Lu a 解释器的状态。 L ua 库是完全可重入的: 它没有任何全局变量。 状态机所有的信息都可以通过这个结构访问到。

这个结构的指针必须作为第一个参数传递给每一个库函数。 l ua_newstate 是一个例外, 这个函数会从头创建一个 L ua 状态机。

l。a_status

返回线程 L 的状态。

正常的线程状态是 0 (LUA_OK)。 当线程用 lua_resume 执行完毕并抛出了一个错误时, 状态值是错误码。 如果线程被挂起,状态为 LUA_YIELD 。

你只能在状态为 LUA_OK 的线程中调用函数。 你可以延续一个状态为 LUA_OK 的线程 (用于开始新协程)或是状态为 LUA_YIELD 的线程 (用于延续协程)。

lu a_stringtonumber

size_t lu a_stringtonumber (l ua_State *L, const char *s)

将一个零结尾的字符串 s 转换为一个数字, 将这个数字压栈,并返回字符串的链慧高总长度(即长度加一)。 转换的结果可能是整数也可能是浮点数, 这取决于 Lua 的转换语法(。 这个字符串可以有前置和后置的空格以及符号。 如果字符串并非一个有效的数字,返回 0 并不把任何东西压栈。 (注意,这个结果可以当成一个布尔量使用,为棚尺真即转换成功。)

lu a_toboolean

int lu a_toboolean (lu a_State *L, int index)

把给定索引处的 Lu a 值转换为一个 C 中的布尔量( 0 或是 1 )。 和 L ua 中做的所有测试一样, lua_toboolean 会把任何不同于 false 和 nil 的值当作真返回; 否则就返回假。 (如果你想只接收真正的 boolean 值,碧悉 就需要使用 lua_isboolean 来测试值的类型。)

lu a_tocfunction

lu a_CFunction lua_tocfunction (lu a_State *L, int index)

把给定索引处的 L ua 值转换为一个 C 函数。 这个值必须是一个 C 函数; 如果不是就返回 NULL 。

lu a_tointeger

lua_Integer l ua_tointeger (lu a_State *L, int index)

等价于调用 l ua_tointegerx, 其参数 isnum 为 NULL。

lu a_tointegerx

l ua_Integer lua_tointegerx (lua_State *L, int index, int *isnum)

将给定索引处的 L。a 值转换为带符号的整数类型 lu a_Integer。 这个 Lu a 值必须是一个整数,或是一个可以被转换为整数 (3)的数字或字符串; 否则,lua_tointegerx 返回 0 。

如果 isnum 不是 NULL, *isnum 会被设为 *** 作是否成功。

lu a_tolstring

const char *lu a_tolstring (lu a_State *L, int index, size_t *len)

把给定索引处的 Lua 值转换为一个 C 字符串。 如果 len 不为 NULL , 它还把字符串长度设到 *len 中。 这个 L ua 值必须是一个字符串或是一个数字; 否则返回返回 NULL 。 如果值是一个数字, lua_tolstring 还会 把堆栈中的那个值的实际类型转换为一个字符串。 (当遍历一张表的时候, 若把 lua_tolstring 作用在键上, 这个转换有可能导致 lua_next 弄错。)

lua_tolstring 返回一个已对齐指针 指向 Lua 状态机中的字符串。 这个字符串总能保证 ( C 要求的)最后一个字符为零 ('\0') , 而且它允许在字符串内包含多个这样的零。

因为 Lua 中可能发生垃圾收集, 所以不保证 lua_tolstring 返回的指针, 在对应的值从堆栈中移除后依然有效。

程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发. 程序有时候越短,并不

一定越快,有时候程序很多代码,但不一定会很慢. 性能是一把双刃剑, 获得时间效率的森槐虚同时, 牺牲

的是空间的开销. 这里提供一些建议以提高你的程序运行速度和减低系统荷载。

首先是尽此燃量减少I/O *** 作,类似对硬盘的读写的I/O *** 作是最耗费时间的, 比如读写数据库。以下是

减少I/O *** 作的例子:

1, 减少数据库DB的读写 *** 作, 当使用VIEW视图的时候, 当被视图join的table有数据更新 *** 作的时

候, 同时系统也会更新到这个view里面, 使得它们之间的数据一样, 所以使用视图会对这些日常 ***

作带来效率问题. 如果视图join的表多数是日常事物需要更新的事物数据表(如EKET), 就要避免

使用视图.

2, 避免使用SELECT *, 尽量使用SELECT A B C INTO TABLE ITAB这样的语句。这个 *** 作会将所有符

合条件的数据一次性地读进内表,这比在SELECT A B C INTO WA... APPEND... ENDSELECT的循环中

添加数据到内表要快。不用频繁的读DB.

3, 避免频繁使用SELECT SINGLE语句, 特别是在LOOP和SELECT...ENDSELECT里面用, 应该把要读取

的数据用SELECT FOR ALL ENTRIES IN 一次全部取得, 然后用READ TABLE WITH KEY ... BINARY

SEARCH.

虽然说 *** 作内存比磁盘 *** 作要高效,但是如果对内存的使用不加以控制,可能有些时候不得不对硬盘

的交换空间 *** 作, 这样就增加了对磁盘的I/O读写 *** 作.正如下面所说:

4, 当你定义内表的时候可以也会出现这样的问题, 比如你定义一个内表使用的是OCCURS 100,而不

是OCCURS 0, 会导致内表长度大于100的时候,就会占用系统页面缓存。

5, Field-groups对于多层次的排序和显示是非常有用的。它是将数据写入系统的页面文件,而不是

内存(内表一般是使用内存的)。基于这个原因,field-groups比较适合于处理大量数据的列表(

一般超过50000条记录)。如果涉及大量的数据处理,应该首先和系统管理员协商来决定这个程序最

多能使用多少内存,以计算这个程序需要使用多少资源。然后你就可以决定是把数据写入内存还是

交换空明笑间。

6, 用SORT代替ORDER BY, ORDER BY从句是执行在数据库服务器上, 而SORT是ABAP语句执行在应用服

务器上的. 数据库服务器通常会形成性能瓶颈问题, 所以最好是吧数据导入内表做SORT.

7, 避免使用SELECT DISTINCT语句, 因为当你用来判断唯一的字段为非索引字段时, 效率是十分的

低, 所以请导入内表SORT后, 使用DELETE ADJACENT DUPLICATES 来去重复.

其次就是要减轻CPU的负载, 可以通过优化程序来改善,比如在程序中语句和算法, 以下是减低CPU

负载的优化例子:

1, 使用宏代替频繁函数调用. ABAP没有内联函数这个说法, 所以我们如果需要频繁调用函数时, 函

数调用有栈内存创建和释放的开销. 在ABAP中可以用宏代码提高执行效率,宏代码不是函数但使用

起来像函数,编译器用复制宏代码的方式取代函数调用,省去了参数压栈、从而提高速度。注意使

用宏有缺点:(1)容易出错, 宏不能pass-by-value按值传递,用于代替实现函数功能时要十分注意!

(2)不可调试(3)无法 *** 作类的私有数据成员.

2, 避免使用过得的LOOP 和SELECT .... END SELECT. 避免使用嵌套的LOOP 和SELECT .... END

SELECT.

3, 尽可能多地使用表的KEY FIELD作为Where分句的条件选项。比如SELECT * FROM BSEG WHERE

BUKRS = '1000' AND BELNR = '0100000007' AND GJAHR =

'2006' AND BUZEI = '003'. 这里的四个字段BUKRS,BELNR,GJAHR,BUZEI 都

是BSEG表的KEY字段.

4, 如果某些数据需要频繁的从不同表提取, 使用视图VIEW实现读取缓存可以提高效率. 当视图连接

的是读取次数较多, 但写入不频繁的表时(比如物料主数据表MARA), 可以使用视图, 这样比在程序

里面简单用join要快,理论上join语句每次读取的速度都是一样的, 而视图是从读二次开始就快了,

而且cache使得网络负载减低.

5, 使用SQL语句里面的JOIN时候, 应该避免JOIN的表不要超过3个, 否则严重影响效率. 如果真的要

JOIN表3个以上的话, 正确的方法不是用视图VIEW, 而是使用SELECT ... INTO TABLE ... FOR ALL

ENTRIES IN 以及 READ TABLE WITH KEY BINARY SEARCH.例如我们要提高读取BSEG表的性能,首先我

们会根据GJAHR主键从BKPF表取出部分数据到内表itab,然后使用FOR ALL ENTRIES IN itab WHERE

BSEG~BELNR = itab~BELNR 这样的的方法取得符合itab里所有条件的BSEG数据.注意使用FOR ALL

ENTRIES要先CHECK作为条件的内表itab是否为空,还有作为WHERE的条件在这个内表里面是否会有空

值存在,否则无效.

6, 注意使用CORRESPONDING FIELDS OF 和 MOVE-CORRESPONDING 时候会进行字段比较, 带来CPU的

开销大.

7, 避免过得而频繁的数据类型转换,比如N转换为C,但是从N转换成STRING却是很快的,因为 *** 作

STRING比CHAR类型少了比较长度的时间.

8, 使用二级索引提高DDIC的读写效率, 可以根据你的需要在SE11里面创建INDEX, 并让你程序里的

SQL查询语句里WHERE条件的顺序与你的索引顺序一致.

9, 二分查找比线性查找要高效,READ TABLE的之前使用SORT TABLE BY XXX 某个表关键字段进行排

序, 然后使用READ TABLE WITH KEY XXX = 'XXX' BINARY SEARCH. 这个就是所谓的二分

查找法的应用.

10, 避免使用SQL语句动态查询条件,动态表名和动态字段名, 必要时候用宏或者子程序模块代替.

11, 对于同一功能的函数和方法, 调用METHOD比调用FUNCTION要快.

12, SORTED TABLE可以使用二分查找法取得节点, 其时间复杂度是O(log N),但是插入节点会慢,因

为要移动很多节点. 而HASHED TABLE则是基于哈希算法的,其高效主要体现在把数据的存储和查找时

间大大降低,几乎可以看成是常数时间O(1),而代价是消耗比较多的内存,然而在硬件技术越来越

发达的今天,用空间换时间的做法在某种意义上是值得的。但是使用哈希表必须注意键值的唯一性

!如果键值会出现重复的话, 不能使用哈希表,只能用排序表和标准表。

13, 使用APPEND LINES(或者INSERT LINES) OF ITAB1 TO ITAB2 比 LOOP AT ITAB1 INTO WA.

APPEND(INSERT) WA TO ITAB2. ENDLOOP. 要高效.

14, 使用效率比较高的COLLECT, DELETE ADJACENT DUPLICATES FROM语句。

15, 使用高效的CONTEXT SQL语句.如以下代码2比代码1要快10倍以上!

代码1:

SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.

SELECT SINGLE AIRPFROM AIRPTO INTO (AP1, AP2)

FROM SPFLI

WHERE CARRID = SBOOK_WA-CARRID

AND CONNID = SBOOK_WA-CONNID.

SELECT SINGLE NAME INTO NAME1 FROM SAIRPORT

WHERE ID = AP1.

SELECT SINGLE NAME INTO NAME2 FROM SAIRPORT

WHERE ID = AP2.

ENDSELECT.

代码2:

SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.

SUPPLY CARRID = SBOOK_WA-CARRID

CONNID = SBOOK_WA-CONNID

TO CONTEXT TRAV1.

DEMAND AIRPFROM = AP1

AIRPTO = AP2

NAME_FROM = NAME1

NAME_TO= NAME2

FROM CONTEXT TRAV1.

ENDSELECT.

最后是注意内存的使用,以下是内存优化方面的例子:

1, 虽然ABAP拥有垃圾处理的机制, 但是这个是在程序运行完成后实现的. 所以我们尽量把无用的变

量,内表,对象都释放掉

2, 尽量减少无用的静态定义的变量,内表和对象, 因为静态定义的对象会在编译开始就占有内存空

3, 尽量减少网络的传输负载, 比如在设计RFC远程调用传回的内表数据要尽量精简, 数据量越大,对

CPU和内存需求越多

4, 内存使用紧张的情况下, 使用FREE语句, 以及SQL语句的PACKAGE SIZE n 选项.

SELECT vbeln erdat

FROM vbak

INTO TABLE li_vbak PACKAGE SIZE 50.

程序员如何提高自己的工作效率?程序员要在IT界混出个名堂,也要有高效的工作效率才行。下面我为大家整理了程序员提高工作效率的办法,欢迎大家阅读参考!

程序员如何提高工作效率

1)键戚兆盘功底要扎实

敲键盘时要使用标准指法。可能你认为这是程序员的基本功,可是我发现其实很多程序员都做不到这点。看着他们敲代码时那笨拙的指法我就心急。其实炼成标准指法不难,相当年我还是一指禅,打字极慢,痛定思定,在一周内我打字必用标准指法,再别扭也要坚持,一周后就适应了标准指法了。现在不说运指如飞也算是略有小成。练习指法和键盘速度可以给大家推荐一些网站:http://10fastfingers.com/typing-test/english,这个就是练习标准指法的,我可以轻松上60 WPM(每分钟60单词),有个外国同事可以达到130以上,那才叫恐怖。http://typing.io/lessons,专门供程序员练习敲代码的网站,融合了各种括号和标点,难度有点大。

2)要熟悉IDE的各种快捷键及特性

IDE基本上是码农们上班中使用时间最长的软件。首先要选择一个趁手的IDE,俗话说,工玉成其事,必先利其器嘛。如果是C#阵营的那肯定是最新版的Vistual Studio了,如果是Java阵营的话当然是Intellij了(eclipse作为开源IDE,真心比不过Intellij)。我现在使用Intellij可以在95%的情况下不用鼠标,全键盘完成开发过程中的大部分 *** 作。我觉得没有什稿唯么常用快捷键、不常用快捷键之分,只要你知道的快捷键就要拿来用。

尤其是各种重构快捷键必须要熟练掌握,当我看到码农修改变量名时不用重构快捷键,而是自己手动在引用的地方一个个改,然后编译查错时,真为他们捉急。还有各种inline,introduce的快捷键真是好用到爆,掌握了这些快捷键可以说对代码进行任何重构都不费除灰之力,我们的注意力也从手动修改代码转移到如何发现坏味道了。Vistual Studio中推荐安装ReSharper,其开发公司与Intellij开发公司是同一家。除了重构快捷键,还要掌握一些IDE的特性,比如调试时可以插入指定条件来命中断点等,这些就要平时的积累和学习,另外还有好奇心。我敢说你现在挨键仔培个看IDE菜单,至少有30%功能你从没用过或不知道是干什么用的,其实里面有些功能是非常实用的,只是你没尝试而已。

3)至少熟练掌握一种shell终端

作为程序员老用图形化界面咋行,要用那种古老的命令行界面才能显示出你的高深嘛!鼠标点界面谁都会,而命令行界面不是谁都能驾驭。有些功能在命令行下要比图形界面下高效N倍。比如我使用git提交文件时都是在命令行下查看哪些文件被修改了,哪些是新添加的,修改的部分是哪些等。

使用图形化界面要用鼠标点来点去,效率实在太低。Linux系统下的终端太多了,就不推荐了。Mac系统下推荐使用iTerm2这个壳,其比MAC自带的terminal多了不少实用的特性,也能方便切换自己喜欢的配色。Windows下当然首推Windows Power Shell了。Windows Power Shell本身集成了常用的实用工具,并且与.net framework无缝结合,这点是那些在Windows上的类Linux模拟器(比如Cygwin)是远远比不了的。

4)具有一定编写shell脚本的功底

光会用现有的`脚本还不行,还要会根据情况编写脚本来实现自己特定的一些目标。比如我使用MAC机上的终端时,经常需要在不同目录间跳来跳去,每次都打一串的cd …..很麻烦,后来我就自己写了一个小工具,可以给指定的目录起别名,想要跳到这个目录只要敲别名即可(参见 http://www.huangbowen.net/blog/2013/02/16/gtshell/)。

还有我在Windows系统上工作时,也经常编写一些Power Shell脚本,比如一个命令就启动指定的FTP服务器,一些小命令用来实现快速在不同项目源码间切换并执行构建命令等。这些命令编写起来都很简单,在提高工作效率方面很好帮助,因为一些常用的费时的 *** 作每天重复N次,让人很厌烦,如果能够使用脚本将其自动化起来,岂不是就把自己给解脱了?

5)多语言编程

在这个世界有太多太多的编程语言,但凡稍微流行的编程语言都有自己独特的优势,而我们要善于利用每种编程语言的特点,而不是整天吵闹那种语言更强大。我自己熟悉C#、java语言,也用JavaScript、Ruby、Python、Groovy做过一些东西,甚至为了理解函数式编程还专门学习了Haskell语言。这些语言都给我带来了实用的效果。比如我用Ruby写了一个插件,可以自动把我主站上的博客同步到博客园中的博客来。

我使用Groovy给我的Java代码写单元和集成测试,比使用Java语言编写要快很多。我用Python和WebDriver写了一个论坛灌水工具来刷积分。你掌握的语言越多,你的视野就越广,你对编程的理解就会越深入。当然我不赞成盲目的求多,至少你要有2到3门精通的语言,从语言语法、语言运行时、语言特性、语言API等方面都要有深入学习和见解,当你再学习其它语言时也不会浮于表面的了。

6)这是最重要的一点,时刻保持一颗好奇心,一颗坚定不移的提高工作效率的决心

很多人都抱着差不多态度,心想“我虽不是标准指法,敲键盘速度也差不多”,“我IDE快捷键用的不多,也没觉得那里影响到我开发”,“我只会C#一种语言,还不照样干到现在了吗?”之所以有这种想法,是是因为你没有见到真正高效的人。我曾看到某IT界牛人那出神入化的VIM *** 作,简直已经超越了指哪打哪的境界,已经达到了键随心动的境界。

我也看到某高级程序员使用IDE快捷键三下五除二就把一段丑陋的代码给收拾的服服帖帖。耳濡目染之下让我坚定了这个决心,不做差不多先生。所以平时我和同事一起工作时,就留心他们有哪些方法和工具来提高自己的工作效率。如果他们使用了一些好用的快捷键而我不知道,那我就会记下来下次自己用(快捷键熟练程度上我早已是我们项目组的number one)。

如果看到他们使用了一些好的工具我也会立马回去下载下来自己用。(比如前两天我看到同事使用SuperPutty来连接远程主机,其支持多tab方式,这正是我想要的功能。我回去立马下载下来,抛弃了以前的Putty)这样时间长了,集众人之所长,你自然也成为效率达人了。

 


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12410580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存