I'm looking for a fast routine for decoding bits set in a UInt64 (C#)

The one I'm using now is (I have an array called BitMasks[65] with BitMasks[0] = 0)
static ushort DecodeBits(UInt64 BitMask, ushort[] arrValues)
{
ushort Index = 0;
ushort BitIndex = 1; // Because BitMasks[0] has been set to ZERO
while (BitMask != 0)
{
if ((BitMask & BitMasks[BitIndex]) != 0)
{
arrValues[Index++] = BitIndex;
BitMask &= (BitMask - 1);
}
BitIndex++;
}
return Index;
}

In my case the number of bits set in a UInt64 varies from 0-8 usually.