代码优化

gcc -O2 优化,到底做了什么? 程序都不能正常运行了。

大兔子大兔子 提交于 2020-03-06 10:19:38
一个项目开发到维护有五年时间了。 今天在项目中加入了一段代码后,软件启动后,窗口显示不出来了。 加入的代码: HMODULE hDll_kernel32 = LoadLibrary("kernel32.dll"); // 加载 kernel32.dll if(hDll_kernel32) { FARPROC proc = GetProcAddress(hDll_kernel32, "SetDllDirectoryA"); //导出 DLL 库函数地址 if(proc) { //printf("在 kernel32.dll 找到 SetDllDirectoryA() \n"); typedef BOOL (*func_SetDllDirectoryA)(LPCSTR); func_SetDllDirectoryA _SetDllDirectoryA = (func_SetDllDirectoryA)proc; //函数指针 int status = _SetDllDirectoryA(app_folder_path); //将目录添加到用于查找应用程序DLL的搜索路径 printf("_SetDllDirectoryA()->status:%d\n", status); } FreeLibrary(hDll_kernel32); //释放 hDll_kernel32 = NULL;

fre 代码优化

喜你入骨 提交于 2020-03-05 15:02:50
https://github.com/yisar/fre 一个比较小的框架, 想看看实现原理, 结果看到这样的代码..... const hashfy = c => { const out = {} c.pop ? c.forEach((v, i) => v.pop ? v.forEach((vi, j) => (out[hs(i, j, vi.key)] = vi)) : (out[hs(i, null, v.key)] = v) ) : (out[hs(0, null, c.key)] = c) return out } const hs = (i, j, k) => k != null && j != null ? '.' + i + '.' + k : j != null ? '.' + i + '.' + j : k != null ? '.' + k : '.' + i 代码主要作用是将dom结构转化为一个k-v形式的对象, 用于做diff 每个节点的key是路径的节点的 key或者index 但是这个代码只支持最多二维数组, 如果三维的话会报错 <div> {Array(3).fill().map((x, i) => Array(3).fill().map((y, j) => Array(3).fill().map((z, k) => ( <div> {i},{j},

VisualBasic代码优化总结

烂漫一生 提交于 2020-02-29 07:11:12
精用Boolean表达式,让代码再减肥 1、传统方法: If SomeVar > SomeOtherVar Then x = x + 1 End If 2、更简练的方法 x = x - (SomeVar > SomeOtherVar) 1、传统方法: If SomeVar > SomeOtherVar Then BoolVal = True Else BoolVal = False End If 2、更简练的方法 BoolVal = (SomeVar > SomeOtherVar) 用InStr函数实现代码减肥 检测字符串中是否包含一个元音字母 1、传统方法: If UCase$(Char) = "A" Or UCase$(Char) = "E" Or UCase$(Char) = "I" Or UCase$(Char) = "O" _ Or UCase$(Char) = "U" Then 'it is avowel End If 2、更简练的方法 If InStr("AaEeIiOoUu", Char) Then 'it is avowel End If 可能BUG:Char长度为1时正常,长度超过1时可能出现Char="Aa"的可能 检查Word中是否包含一个季节的名字 1、传统方法: If LCase$(word) = "winter" Or LCase$(word) =

如何编写高质量的VB代码(转自雪中漫步的专栏)

独自空忆成欢 提交于 2020-02-29 07:08:41
简介:   本文描述了如何通过一些技术手段来提高VB代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。在编码技术中介绍了如何通过使用高效的数据类型、减少外部引用等编程手段来提高代码执行速度,减少代码消耗的系统资源。在编译优化技术中介绍了如何正确地利用VB提供的编译选项对在编译时最后生成的可执行文件进行优化。    前言   什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。这篇文章汇集了作者在使用VB进行软件开发时积累下来的一些经验,通过一些简单的例子来向你展示如何写出高效的VB代码。其中包含了一些可能对VB程序员非常有帮助的技术。在开始之前,先让我陈清几个概念。   让代码一次成型:在我接触到的程序员中,有很多人喜欢先根据功能需求把代码写出来,然后在此基础上优化代码。最后发现为了达到优化的目的,他们不得不把代码再重新写一遍。所以我建议你在编写代码之前就需要考虑优化问题。   把握好优化的结果和需要花费的工作之间的关系:通常当完成了一段代码,你需要检查和修改它。在检查代码的过程中,也许你会发现某些循环中的代码效率还可以得到进一步的改进。在这种情况下,很多追求完美的程序员也许会立马修改代码。我的建议是,如果修改这段代码会使程序的运行时间缩短一秒,你可以修改它。如果只能带来10毫秒的性能改进,则不做任何改动

测试文章测试文章

那年仲夏 提交于 2020-02-29 06:38:18
  在 上一篇文章 中,我们通过一些示例谈论了IL与CLR中的一些特性。IL与C#等高级语言的作用类似,主要用于表示程序的逻辑。由于它同样了解太多CLR中的高级特性,因此它在大部分情况下依旧无法展现出比那些高级语言更多的CLR细节。因此,如果您想要通过学习IL来了解CLR,那么这个过程很可能会“事倍功半”。因此,从这个角度来说,老赵并不倾向于学习IL。不过严格说来,即使IL无法看出CLR的细节,也不足以说明“IL无用”——这里说“无用”自然有些夸张。但是,如果我们还发现,那些原本被认为需要通过IL挖掘到的东西,现在都可以使用更好的方法来获得,并且可以起到“事半功倍”的效果,那么似乎我们真的没有太多理由去追逐IL了。   在这篇文章中,我们使用最多的工具便是 .NET Reflector ,从.NET 1.x开始,.NET Reflector就是一个探究.NET框架(主要是BCL)内部实现的有力工具,它可以把一个程序集高度还原成C#等高级语言的代码。在它的帮助下,几乎所有程序集实现都变得一目了然,这大大方便了我们的工作。老赵对此深有感触,因为在某段不算短的时间内,我使用.NET Reflector阅读过的代码数量远远超过了自己编写的代码。与此相反的是,老赵几乎没有使用IL探索过.NET框架下的任何问题。这可能还涉及到方式方法和个人做事方式,但是如果这真有效果的话,为什么要舍近求远呢

CSS零基础入门教程缩写优化CSS文件的体积

一曲冷凌霜 提交于 2020-02-28 23:49:53
Web网站可用性的关键指标是速度,更确切地说,是页面能以多快的速度出现在访问者的浏览器窗口里。影响速度的因素有很多种,包括Web服务器的速度、访问者的Internet连接情况,以及浏览器必须下载的文件大小。尽管你无法控制服务器和连接的速度,但是你可以控制构成网站Web页面的文件大小。 为了让网站能够更快,Web的建设者都会按常规地压缩和优化网站上的每一个图像文件,这常常使得为了将文件的大小减少几个百分点而牺牲了图像的质量。由于CSS样式表是纯文本文件,和图像相比相对较小,所以Web建设者很少考虑采取措施减少其CSS样式表文件的大小。但是,通过使用CSS缩写以及其他的一些简单技巧,你可以在很大程度上减少样式表的大小。在我对自己样式表的一次非正式的特别测试中,我把文件的大小降低了大约25-50%。 新建一个前端学习qun438905713,在群里大多数都是零基础学习者,大家相互帮助,相互解答,并且还准备很多学习资料,欢迎零基础的小伙伴来一起交流。 使用CSS的缩写性质 CSS的缩写性质(shorthand property)是一些专用的性质名,用来代替多个相关性质的集合。例如,间隙性质(padding property)是顶部间隙(padding-top)、右侧间隙(padding-right)、底部间隙(padding-bottom)和左侧间隙(padding-left)的缩写。

利用低代码优化人力资源配置,为软件开发降本提效 ZT

一世执手 提交于 2020-02-28 19:07:21
低代码 是一种主要应用于企业信息化领域的快速开发技术。借助低代码,开发者无需编码即可生成企业应用的常见功能,少量编码能开发出更多扩展功能。有了低代码技术,IT团队甚至业务团队都可以参与到编写应用程序当中。对于企业来说,这将会帮助企业扩大可供招聘的候选人员范围,通过优化人力资源配置实现软件开发的降本增效。 (低代码开发) 人力资源成为企业软件开发的瓶颈 不能否认,开发者之间的技能水平存在较大差距。在寻找优秀的软件开发人员时,招聘过程尤为痛苦。一方面,企业数字化转型进程叠加上互联网行业的持续火热,企业和系统集成商对开发人员的需求远远超过供应。尤其是那些具有DevOps,UI和UX技能的开发人员,工资水平正在大踏步提升。另一方面,为了保证软件与企业业务需求的贴合成都程度,雇主对跨部门沟通、业务流程以及专业知识等“软技能”的需求也越来越大。 先行者们逐渐认识到,他们更需要的是自我驱动、有良好沟通能力和团队协作的人。只有这些人才能帮他们缩小业务团队和的开发团队之间的差距,让产出的企业软件更容易落地。 因此,如何用更低的成本,招聘到更多既懂业务又能开发出软件的开发者来加速软件交付,成为摆在数字化转型相关企业和系统集成商面前的难题。 低代码开发带来的新思路 大约3年前,“软件开发者”和“程序员”具有相同的含义,因为编码是构建企业应用的唯一方法。但是近年来,“低代码”或“无代码”应用程序开发平台

优化与测试

别说谁变了你拦得住时间么 提交于 2020-02-28 05:51:11
测试代码 211606343 杨宇潇 211606360 丁培辉 单元测试 测试思路 允许某些测试被忽略或分组并一起执行。 从有返回值,有传参的函数开始入手。测试预期值和返回值是否一样。 定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。 由于void函数无返回值,则通过设立flag检查测试。 部分测试代码 在测试方法传入参数格式,通过assertEquals进行对比,测出代码是否符合预期。 测试要调用的方法应 为public 类,不然调用会出错。 @Test //测试优先级的判断是否正确 public void testLevel_1() { String operation = "+"; assertEquals(1, MathExam6360.Level(operation)); } @Test //测试传入的参数格式是否正确 public void testMathExam_1(){ String[] str = new String[] {"-n", "10", "-grade", "3"}; assertEquals(true,MathExam6360.MathExam(str)); } @Test //测试传入的题目数量和年级是否符合大小限定以及格式 public void testJudge_1() { String count =

Java代码优化的35个细节,你用了吗?

一个人想着一个人 提交于 2020-02-28 00:57:40
前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。 代码优化的目标是: 减小代码的体积; 提高代码运行的效率; 代码优化细节; 1、尽量指定类、方法的final修饰符 带有final修饰符的类是不可派生的。在Java核心API中,有许多应用final的例子,例如java.lang.String,整个类都是final的。为类指定final修饰符可以让类不可以被继承,为方法指定final修饰符可以让方法不可以被重写。如果指定了一个类为final,则该类所有的方法都是final的。Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化。此举能够使性能平均提高50% 。 2、尽量重用对象 特别是String对象的使用,出现字符串连接时应该使用StringBuilder/StringBuffer代替

对象并不一定都是在堆上分配内存的

好久不见. 提交于 2020-02-27 14:11:00
JVM内存分配策略 关于JVM的内存结构及内存分配方式,不是本文的重点,这里只做简单回顾。以下是我们知道的一些常识: 1、根据Java虚拟机规范,Java虚拟机所管理的内存包括方法区、虚拟机栈、本地方法栈、堆、程序计数器等。 2、我们通常认为JVM中运行时数据存储包括堆和栈。这里所提到的栈其实指的是虚拟机栈,或者说是虚拟栈中的局部变量表。 3、栈中存放一些基本类型的变量数据(int/short/long/byte/float/double/Boolean/char)和对象引用。 4、堆中主要存放对象,即通过new关键字创建的对象。 5、数组引用变量是存放在栈内存中,数组元素是存放在堆内存中。 在《深入理解Java虚拟机中》关于Java堆内存有这样一段描述: 但是,随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。 这里只是简单提了一句,并没有深入分析,很多人看到这里由于对JIT、逃逸分析等技术不了解,所以也无法真正理解上面这段话的含义。 PS:这里默认大家都了解什么是JIT,不了解的朋友可以先自行Google了解下 其实,在编译期间,JIT会对代码做很多优化。其中有一部分优化的目的就是减少内存堆分配压力,其中一种重要的技术叫做 逃逸分析 。 逃逸分析 逃逸分析(Escape