Это во многом зависит от данных и функций, которые вы используете внутри и для машины. В последнее время я возился с параллельными и параллельными. И обнаружил, что они сделали мои приложения еще медленнее ... (на 4-ядерном компьютере, возможно, если у вас 24-ядерный сервер, это другая история)
Я думаю, что управление потоками означает слишком много накладных расходов ...
Даже MS на их документации (вот очень длинный pdf на msdn об этом http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=19222) признает, что это не заставляет приложения работать быстрее. Вы должны попробовать каждый раз, и если это работает, отлично, и если не везет.
Вы должны попробовать внешние и внутренние, но, по крайней мере, в приложениях, которые я пробовал, ни одно из них не делало приложение быстрее. Внешние или внутренние значения не имели большого значения, я просто получал одинаковое время выполнения или даже хуже.
Может быть, если вы используете параллельные коллекции, вы получите лучшую производительность. Но опять же, не пытаясь, невозможно сказать.
EDIT:
Я только что нашел хорошую ссылку на MSDN, которая оказалась очень полезной (в моем случае) для улучшения производительности Parallel.foreach
http://msdn.microsoft.com/en-us/library/dd560853.aspx