It is quite dependent on the use case, but in general:
If you implement a RhinoCommon class/method in a C# scripting component in a one-to-one manner, the equivalent standard GH component will likely be faster, since it is compiled (edit: this reason is incorrect). That said, more complex definitions (with many RhinoCommon calls) could be faster if implemented in a scripting component (or a proper compiled plugin), since you can optimise the algorithm/implementation, there is no costly input/output/casting of data, you can multi-thread the code (again depending on the case) etc.
Also, I would recommend profiling your definition/code to get explicit performance data. For GH definitions turn on the profiler widget (Display -> Canvas Widgets -> Profiler), for C# scripting you can use the Stopwatch class.
Also II: Piping is an inherently costly method. Unless you actually need to render the high-quality NURBS representation, you could use another method (mesh piping comes to mind, think there's a plugin for this as I recall).