Not when your vertices are lower than about 100. If the number is less than 100 then internally Direct3D turns DrawPrimitiveUP into a DrawPrimitive call. In fact gamedev and beyond3d both recommend using DrawPrimitiveUP on batches of less than 100.
This is slower than using vertex buffers but maybe it won't be significant for you.
Using DrawPrimitiveUP on small batches is faster than continually locking/unlocking vertex buffers.
Ideally you want to use a huge indexed vertex buffer and simply give your object a certain range of those indices to use - same for textures. Specify a huge texture and index into it with your u,v coords for the correct texture.
This is akin to the old days when they used tiled bitmaps to represent all animation frames and simply indexed into the bitmap to extract the correct image.
Incidentally try this instead of what you are using.
ID3DXSprite is much easier than creating your own class that pretty much does the same thing. I'm changing all the billboarding code and sprite code in both of my games to use ID3DXSprite.
void Create(IDirect3DDevice9 *_device,float _scale,D3DXVECTOR3 _pos,std::string _file)
//Create Sprite interface