mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Sorting speed-up: Cache the bool value of Transaction's is_closing property.
This value is queried on each comparison of split or txn sort function, which means it is called quite a lot. Avoiding the KVP lookup of this property gains a lot in terms of CPU cycles.
This commit is contained in:
parent
1eed3db5e7
commit
eb9e45bc20
@ -273,6 +273,7 @@ gnc_transaction_init(Transaction* trans)
|
||||
trans->orig = NULL;
|
||||
trans->readonly_reason = NULL;
|
||||
trans->reason_cache_valid = FALSE;
|
||||
trans->isClosingTxn_cached = -1;
|
||||
LEAVE (" ");
|
||||
}
|
||||
|
||||
@ -2195,9 +2196,13 @@ xaccTransSetIsClosingTxn (Transaction *trans, gboolean is_closing)
|
||||
g_value_init (&v, G_TYPE_INT64);
|
||||
g_value_set_int64 (&v, 1);
|
||||
qof_instance_set_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
|
||||
trans->isClosingTxn_cached = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
qof_instance_set_kvp (QOF_INSTANCE (trans), NULL, 1, trans_is_closing_str);
|
||||
trans->isClosingTxn_cached = 0;
|
||||
}
|
||||
qof_instance_set_dirty(QOF_INSTANCE(trans));
|
||||
xaccTransCommitEdit(trans);
|
||||
}
|
||||
@ -2353,12 +2358,20 @@ xaccTransGetNotes (const Transaction *trans)
|
||||
gboolean
|
||||
xaccTransGetIsClosingTxn (const Transaction *trans)
|
||||
{
|
||||
GValue v = G_VALUE_INIT;
|
||||
if (!trans) return FALSE;
|
||||
qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
return g_value_get_int64 (&v);
|
||||
return FALSE;
|
||||
if (trans->isClosingTxn_cached == -1)
|
||||
{
|
||||
Transaction* trans_nonconst = (Transaction*) trans;
|
||||
GValue v = G_VALUE_INIT;
|
||||
qof_instance_get_kvp (QOF_INSTANCE (trans), &v, 1, trans_is_closing_str);
|
||||
if (G_VALUE_HOLDS_INT64 (&v))
|
||||
trans_nonconst->isClosingTxn_cached = (g_value_get_int64 (&v) ? 1 : 0);
|
||||
else
|
||||
trans_nonconst->isClosingTxn_cached = 0;
|
||||
}
|
||||
return (trans->isClosingTxn_cached == 1)
|
||||
? TRUE
|
||||
: FALSE;
|
||||
}
|
||||
|
||||
/********************************************************************\
|
||||
|
@ -119,6 +119,11 @@ struct transaction_s
|
||||
*/
|
||||
char * readonly_reason;
|
||||
gboolean reason_cache_valid;
|
||||
|
||||
/* Cached bool value to indicate whether this is a closing txn. This is
|
||||
* cached from the KVP value because it is queried a lot. Tri-state value: -1
|
||||
* = uninitialized; 0 = FALSE, 1 = TRUE. */
|
||||
gint isClosingTxn_cached;
|
||||
};
|
||||
|
||||
struct _TransactionClass
|
||||
|
Loading…
Reference in New Issue
Block a user