Storage
將數據發送到結構的最便宜和最有效的方法是什麼,為什麼?
我正在努力尋找哪種方式將數據發送到結構更便宜且最有效。我想出了這兩種不同的風格:
struct Database { string name; string addressPerson; } mapping (string => Database) idToDatabase; function setPerson(string _id, string _name, string _address) external { Database storage person = idToDatabase[_id]; person.name = _name; person.addressPerson = _address; }
和
struct Database { string name; string addressPerson; } Database[] public people; mapping (string => uint) idToPerson; function setPerson(string _id, string _name, string _address) external { people.push(Database(_name,_address)); idToPerson[_id] = people.length-1; }
我應該使用哪個,為什麼?我研究了很多,找不到答案。謝謝你。
我嘗試使用上述兩種方法創建範例契約。我使用**Remix IDE**來計算成本。請注意,這些是指示性成本(但仍然有用),可能會根據許多因素而變化。
當您部署合約並呼叫函式 SetPerson() 時,它將在底部窗格中向您顯示交易的詳細資訊。
在此處了解有關交易成本和執行成本之間差異的更多資訊
方法 1(映射到對象)
- 合約部署
交易成本 179161 gas
執行成本 95141 gas
- 函式呼叫
交易成本 65441 gas
執行成本 41609 gas
方法 2(映射到 id、數組)
- 合約部署:
交易成本 361519 gas
執行成本 232075 gas
- 函式呼叫
交易成本 91228 gas
執行成本 67396 gas