Если программа сделает всё, что от неё требовалось, до первого раунда сборки мусора, то будет. 😏
Когда мы рассуждаем на уровне "С против C#", нельзя рассуждать об эффективности. Эффективность бывает у программ, уже запущенных на компьютере и работающих. На этом этапе никакого С и C# уже нет, операционная система отправила процессору бинарный код на исполнение. Поэтому тут уже в самом вопросе проблема.
Если подключить телепатов и додумать суть вопроса, то, наверное, вопрос звучит так. "Пусть есть две программы, которые делают одно и то же, но одна из них написана на C#, а другая на C. Если мы отключим сборку мусора в C#, соберём обе программы и запустим, будет ли производительность программ одинакова?".
Этот вопрос всё ещё некорректен. В C# нет сборки мусора, потому что это язык программирования, набор правил по написанию исходного кода. Сборка мусора производится средой .NET, и её просто невозможно там выключить, не переписав всю систему. В C# даже нет языковой конструкции, которая бы явно удаляла объекты. Как вы собираетесь вручную освобождать память в программе на C#, если язык этого не предполагает?
И в итоге мы приходим к ситуации, прекрасно описанной поговоркой "если бы у бабки были бы яйца, она была бы дедкой". Если мы выкинем из .NET сборку мусора, то нам придётся добавить в C# методы для ручного управления памятью. Виртуальную машину .NET без сборки мусора можно упростить до такой степени, что она станет статичной прослойкой между исходным кодом и результирующим бинарником. На этом этапе мы обнаруживаем, что мы просто программируем на С с большим количеством синтаксического сахара и встроенных библиотек.