Each 250ms the slot WalletModel::pollBalanceChanged is called which, at worst case, calls Wallet::GetBalance. This is a waste of resources since most of the time there aren't new transactions or new blocks. Fix this by early checking if cache is dirty or not.
This is a backport of Core PR18160
See D7938 (Remove locked_chain from CWallet) for why the src/interfaces/wallet.cpp diff looks different