If you are using DSL, first replace the phone line going to the modem. Try skipping any router you may be using and go directly to your modem. If the speeds are still spotty there, go ahead and run a phone line from your demarc to your modem and try there. If its PPoE dont forget to set up the connection on your system.
If you are able to check the speeds at the demarc and they are bad, you should be able to notify your provider and have them service the issue. If the speeds are fine at your demarc then the problem is your lines coming in or some hardware/software issue.
If you are getting good speeds are the demarc you need to ensure that your filters are working, unplug everything that will put noise on your line, phones, satelite dish receiver, fax machine etc. If the speeds improved, hook everything up one by one until you find the noisy culprit.
If you can verify its not the router, the filters, the PC, or the phone line to the modem and the speeds are fine at the demarc you should take your modem to the ISP and have them verify that it gets good speeds there. If it does, you need to have them investigate your line for slow throughput.
If cable, disregard the demarc information. Try skipping the router and going straight to the modem. try connection to a cable line that is closer to the demarc to make sure its not an issue of a bad splitter or line of cable.
You ISP should also be able to log into there router that you are connected to and view your outgoing connections. If you are infected you tend to have a lot more outbound connections then normal. You can also try and use a program like Wireshark to sniff your packets and see what is going on network wise. If you are behind a router and idle, you should mostly see arp requests. If you are getting a lot of connections on odd ports etc, you are probably infected with something. Good luck.