Iveco,
In the simple case, you can create a SourceVoice per sound effect that you're playing in your game. Once you start to push the limits a bit, though, you'll find that this approach doesn't scale.
The best way to do this is to create a pool of voices at level load time. Use those voices during gameplay, finding one that is available whenever you need to play a new sound.
Since there are some things on a voice that can't change once it's created, you need a two-dimensional vector to store the pool of voices. One dimension in the number of channels in the source audio (1, 2, 4, 6, etc). The second dimension is the type of audio. If you restrict all of your source assets to a single format, then you only need a single dimension in your vector/array. Each element in the vector should, ideally, be a pointer to a list of SourceVoices, as well as some state associated with each voice.
Look for a sample concerning voice reuse in the next DirectX SDK. One of my colleagues is also talking about this subject at Microsoft Gamefest in Seattle in February. Keep an eye on
http://www.microsoftgamefest.com/ for more details about his talk.
A non-playing voice takes essentially zero processor time, and uses very little memory, if you use streaming audio. The actual voice object is very lightweight. You should be able to have hundreds, if not thousands, created, as long as they aren't all playing. You should be able to play a hundred or so voices at one time, before you start running into problems outputting the audio.