Nothing in the code has changed aside from the try! -> ? change. Are there any side effects of the ? operator that the try! macro does not have - something that would prevent inlining for example?
Profiling before and after would be useful to see if inlining decisions de facto changed. There are more functions involved, going through the Carrier trait, but it can all be inlined if the compiler wants to.