Whats more wasteful?
- Duplicating your code all over the place, or
- Single line initialization (DRY principle)
The reason why it is a general accepted to inject the repository in the constructor is because it makes the dependencies clear, (they are at one place and one place only)
Dependencies are clear by just checking the constructor, instead of buried deep in the implementations. You may not notice this in the early stages because you only have basic functions (CRUD), but as your application grows you will start noticing the advantage of not having to hunt down dependencies.
If you are worried about performance, most ORM (if you are using one) has lazy initialization.
Another common practice is to instantiate repositories somewhere else (IoC container), then injected in the controller's constructor.
Off Topic
repo = repo ?? new PerfRepository();
Constructing your own concrete repository within your controller increases coupling, therefore breaks the IoC pattern. Instead, you should throw an exception whenever null, plus it supports fail-fast technique (a technique for building high-quality application)