为什么80%的码农都做不了架构师?>>>   

尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足。只是某些时候,我们须对此做些变通,以提升性能。

为便于阅读,以下示例均做了最大程度精简。

如果是 reflect.Type,可将其缓存,避免重复操作耗时。但 Value 显然不行,因为它和具体对象绑定,内部存储实例指针。换个思路,字段相对于结构,除名称(name)外,还有偏移量(offset)这个唯一属性。利用偏移量,将 FieldByName 变为普通指针操作,就可以实现性能提升。

测试一下优化成果。

效果很好,不是吗?剩余的问题是,如何设计缓存结构,这个 offset 变量自然不能用于实际开发。

用 map[Type]map[name]offset?显然不行。每次执行 reflect.TypeOf,这于性能优化不利。可除了 Type,还有什么可以作为 Key 使用?要知道,接口由 itab 和 data 指针组成,相同类型(接口和实际类型组合)的 itab 指针相同,自然也可当作 key 来用。

虽因引入 map 导致性能有所下降,但相比直接使用 reflect 还是提升很多。

利用指针类型转换实现性能优化,本就是 “非常手段”,是一种为了性能而放弃 “其他” 的做法。与其担心代码是否适应未来的变化,不如写个单元测试,确保在升级时做出必要的安全检查。还有,本优化系列,仅仅提供一种优化思路,未必要照抄。

最新动态,请扫码关注

转载于:https://my.oschina.net/qyuhen/blog/669197

Go 性能优化技巧 8/10相关推荐

  1. Go 性能优化技巧 8/10 1

    尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足.只是某些时候,我们须对此做些变通,以提升性能. 为便于阅读,以下示例均做了最大程度精简. 如果是 refle ...

  2. Go 性能优化技巧 7/10

    为什么80%的码农都做不了架构师?>>>    接口的用途无需多言.但这并不意味着可在任何场合使用接口,要知道通过接口调用和普通调用存在很大差别.首先,相比静态绑定,动态绑定性能要差 ...

  3. SQL性能优化技巧,常见优化10经验,数据库查询好慢,还能怎么办

    我熟练应用ctrl c和ctrl v 开发curd代码好多年了. mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那 ...

  4. Java性能优化技巧

    Java性能优化技巧 参考了些书籍,网络资源整理出来,适合于大多数Java应用 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序 ...

  5. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这些旧接口的 S ...

  6. mysql 优化配置 大批量数据插入_php导入大量数据到mysql性能优化技巧

    本文实例讲述了php导入大量数据到mysql性能优化技巧.分享给大家供大家参考.具体分析如下: 在mysql中我们结合php把一些文件导入到mysql中,这里就来分享一下我对15000条记录进行导入时 ...

  7. python linux 优化_Python 代码性能优化技巧

    Python 性能优化除了改进算法,选用合适的数据结构之外,还有几种关键的技术,比如将关键 python 代码部分重写成 C 扩展模块,或者选用在性能上更为优化的解释器等,这些在本文中统称为优化工具. ...

  8. java性能瓶颈分析_Java性能优化技巧整理,做一个深度的程序员

    原标题:Java性能优化技巧整理,做一个深度的程序员 在我们身边是一大批的程序员,层次不一,但是放眼观,我们很容易就可以看到那些是业务型程序员,那些是有层次的程序员.注重细节,注重性能,做一个有深度的 ...

  9. python代码性能优化技巧

    python代码性能优化技巧 代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Pyth ...

最新文章

  1. 使用Python生成动态图表,一个很Cool的教程
  2. tomcat高并发配置调优
  3. Linux下安装 mxnet
  4. 使用git时ssh提示“Load key /home/devid/.ssh/id_rsa: bad permissions”的解决办法
  5. 用c写按键精灵脚本语言,按键精灵之插件编写
  6. 主机路由在计算机中的应用
  7. 前端基础-html-列表
  8. 你的域名是如何变成 IP 地址的?
  9. 5G 时代连接 70 亿人,安全如何保障?
  10. 【大话Mysql面试】-Mysql常见面试题目
  11. 内网穿透,外网装逼:10分钟学会用花生壳实现从外网访问内网的web项目
  12. MODULE_DEVICE_TABLE宏的作用
  13. mysql 经纬度范围_MySQL之根据经纬度查询多少公里范围内的数据
  14. 高通 linux usb 休眠,系统休眠(System Suspend)和设备中断处理
  15. EF(Entity Framework、EF Core)
  16. 免费ssl申请且如何应用到宝塔
  17. 区块链在数字版权领域的应用发展报告(2020)
  18. NSDI'17-论文阅读[CherryPick:Adaptively Unearthing the Best Cloud Configurations for Big Data Analytics]
  19. 2016中国移动办公论坛暨《2016中国移动办公男神报告》发布会成功举办
  20. 妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)

热门文章

  1. 将sqlite查询结果导入到文本文件
  2. CLR via C#(第3版):.net中的定时器整理总结
  3. vivo自带便签新版_原来vivo手机点击这个按钮,还能变成扫描仪,纸质文档一键电子化...
  4. java enum变量_java enum
  5. Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!
  6. python 归一化_几种归一化方法(Normalization Method)python实现
  7. html -%3e 转义,特殊字符html,css转义大全
  8. 7/15 我的第一篇博客-写给自己
  9. HDU3949(线性基算法模版)
  10. [NOI2015]程序自动分析