mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 03:47:29 -03:00
rpc: reserve space for UniValue
variables in blockToJSON
- Reserving space avoid reallocation, this provide noticeable performance increase in verbosity 1.
This commit is contained in:
parent
1749aef52a
commit
ea62aaed3b
2 changed files with 4 additions and 0 deletions
|
@ -181,6 +181,7 @@ void TxToUniv(const CTransaction& tx, const uint256& block_hash, UniValue& entry
|
|||
entry.pushKV("locktime", (int64_t)tx.nLockTime);
|
||||
|
||||
UniValue vin{UniValue::VARR};
|
||||
vin.reserve(tx.vin.size());
|
||||
|
||||
// If available, use Undo data to calculate the fee. Note that txundo == nullptr
|
||||
// for coinbase transactions and for transactions where undo data is unavailable.
|
||||
|
@ -203,6 +204,7 @@ void TxToUniv(const CTransaction& tx, const uint256& block_hash, UniValue& entry
|
|||
}
|
||||
if (!tx.vin[i].scriptWitness.IsNull()) {
|
||||
UniValue txinwitness(UniValue::VARR);
|
||||
txinwitness.reserve(tx.vin[i].scriptWitness.stack.size());
|
||||
for (const auto& item : tx.vin[i].scriptWitness.stack) {
|
||||
txinwitness.push_back(HexStr(item));
|
||||
}
|
||||
|
@ -232,6 +234,7 @@ void TxToUniv(const CTransaction& tx, const uint256& block_hash, UniValue& entry
|
|||
entry.pushKV("vin", std::move(vin));
|
||||
|
||||
UniValue vout(UniValue::VARR);
|
||||
vout.reserve(tx.vout.size());
|
||||
for (unsigned int i = 0; i < tx.vout.size(); i++) {
|
||||
const CTxOut& txout = tx.vout[i];
|
||||
|
||||
|
|
|
@ -183,6 +183,7 @@ UniValue blockToJSON(BlockManager& blockman, const CBlock& block, const CBlockIn
|
|||
result.pushKV("size", (int)::GetSerializeSize(TX_WITH_WITNESS(block)));
|
||||
result.pushKV("weight", (int)::GetBlockWeight(block));
|
||||
UniValue txs(UniValue::VARR);
|
||||
txs.reserve(block.vtx.size());
|
||||
|
||||
switch (verbosity) {
|
||||
case TxVerbosity::SHOW_TXID:
|
||||
|
|
Loading…
Reference in a new issue