If you are inserting a lot of rows in a big table one by one then it will take long time to do so given that the table has a number of indexes.
Try to rewrite the code so that you can do bulk insert. That will be faster.
For example, if you are inserting 2, 000 rows in a heavily indexed table, it might take 20 mins. If you can change the logic and get it done in a single bulk insert you can do it in say, 5 seconds.
If you cannot do so, then create a temp table equivalent to the one where the data should have been inserted. Once all the data are inserted into the temp table one by one, at the end at one go you can move them to the original table. You might need to use transaction and put in some more logic depending on the situations.
Another thing that you can do along with the above or alone is temporary disable the (non-clustered) indexes.
When you insert rows in a table, it is not only the data that MS SQL Server writes to disk but also the indexes on the table. The latter can take up a lot of time. So disable the indexes before you start inserting any data and rebuild it at the end of all insertions. That way you create the indexes at one go.
ALTER INDEX [Index_Name] ON Table DISABLE
ALTER INDEX [Index_Name] ON Table REBUILD