In a random walk, it is hard to efficiently avoid processing the same element twice. If shuffling is slow, create an array of indexes, and shuffle that. Also, where does std::random_shuffle() get its randomness?
Suggested code:
std::vector<int> vRandInv;
vRandInv.resize(pto->vInventoryToSend.size());
for (int i = 0; i < pto->vRandInv.size(); i++) vRandInv[i] = i;
for (int i = 0; i < pto->vRandInv.size(); i++) std::swap(vRandInv[i], vRandInv[i + GetRand(vRandInv.size() - i]);
for (int i = 0; i < pto->vRandInv.size(); i++) {
const CInv& inv = pto->vInventoryToSend[vRandInv[i]];
...