# Solidity中一种高效通过代码减少gas消耗的方法 **Published by:** [Renaissance Labs](https://paragraph.com/@renaissance-labs/) **Published on:** 2022-03-01 **URL:** https://paragraph.com/@renaissance-labs/solidity-gas ## Content ART主要是通过代码中memory来大幅度减少gas使用,示例代码如下:pragma solidity ^0.5.10; contract Test{ struct User{ uint age; uint balance; uint num; } User user; function initUser() public{ user = User({age:20,balance:1000,num:1}); } function setUser1() public { user.age = 30; user.balance = 20000; user.num = 2; } function setUser2() public { User memory temp = user; temp.age = 40; temp.age = 20001; user.num = 3; user = temp; } } pragma solidity ^0.5.10; contract Test{ struct User{ uint age; uint balance; uint num; } User user; function initUser() public{ user = User({age:20,balance:1000,num:1}); } function setUser1() public { user.age = 30; user.balance = 20000; user.num = 2; } function setUser2() public { User memory temp = user; temp.age = 40; temp.age = 20001; user.num = 3; user = temp; } } 我们首先通过initUser方法来初始化一个User对象的数据,然后分别调用setUser1和setUser2两个方法。 你会发现,setUser1需要消耗36476gas,而setUser2只需要效果31595gas,它们的效果相同,消耗的gas却差了5000gas,如果User的字段增多,那么此差距会越来越大。 那么这两种写法的区别是什么呢?我们知道,区块链上的写操作是比较昂贵的,而setUser1进行了多次的写操作,而setUser2只进行了一次整体的写操作。因此,节省了相当大一部分的gas。 ## Publication Information - [Renaissance Labs](https://paragraph.com/@renaissance-labs/): Publication homepage - [All Posts](https://paragraph.com/@renaissance-labs/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@renaissance-labs): Subscribe to updates