SPSite spsite1=new SPSite(SPContext.Current.Web.URL);

SPSite spsite2=SPContext.Current.Site;


What is the difference and when do we decide which one to use?

I feel both give us the site collection object.

Example: SPWeb spweb=spsite1.RootWeb; will mean same as spsite2.RootWeb;  Then why are there 2 ways to do it?


Question: Artifacts in render, but not in preview?
Answer: You have a duplicate of the cylinder with holes object called Circle.002 which is hidden in the viewport, but not in the render. If you enable it in the viewport, the effect becomes obvious:





Also I'm pretty sure you don't need so much subsurf. Usually I don't use more than two subdivisions, sometimes three. 

With all objects set to one level of subsurf, your scene renders in about 2:48 for me.  



With the original subsurf settings, it renders in 3:50.



The visual difference seems pretty negligible, but there is change some of the lighting/camera angle in between tests because I stupidly did the 1 subd test first, then had to reload the scene to get the original subserf levels..



There are also quite a few ngons (faces made up of more than 4 vertices). These usually don't play well with subsurf, and cause some distortion. Here is an example screenshot of some ngons (subsurf is disabled in the screenshot):





I also noticed that you are getting a lot of noise from the environment texture. Enabling Multiple importance sampling in the world settings should help reduce that: