The easiest way to do USB communications is to connect an FT232H or similar chip to an asynchronous serial port on the device. At the host, you can use the .NET SerialPort class or other serial-port APIs to access the device. The device firmware communicates with the serial port. You don't need to know anything about USB to use this method.
For any other device class or vendor driver, including HID, mass-storage, USB CDC, WinUSB, libusb, etc., device firmware must manage enumeration and USB communications at the transaction level. Many vendors provide example code that does much of the work, but you still need some understanding of the code to adapt it for your application. On the host PC, you need a driver that is compatible with the class or vendor driver.
Transfer speed depends on the device's bus speed, the transfer type, the efficiency of the device firmware and host driver and application software, and in some cases, how busy the bus is.