The Racing Steps Foundation driver got the better of Gustavo Menezes after a safety car start to move into 10th behind Motopark's Markus Pommer.
That became ninth on the following lap after Carlin's Callum Ilott spun at the hairpin and remained unchanged all the way to the finish, despite late pressure from Signature's Alexander Albon.
Eighth came courtesy of a 20-second penalty handed out to Mucke's Santino Ferrucci for forcing Prema's Lance Stroll off the track. The indiscretion - followed later by contact with team-mate Maximilian Gunther on the final lap - came just after a second restart.
The return of the safety car was required while the stricken car of Pietro Fittpaldi was recovered following a clash with his Fortec team-mate Martin Cao.
When racing resumed there was only sufficient time for a two-lap sprint to the flag.
Van Amersfoort's rookie Charles Leclerc took the win after snatching the lead from Prema's pole-sitter Felix Rosenqvist with a cutback on the exit from the hairpin just before the safety car emerged.
Carlin's Antonio Giovinazzi claimed the final podium place after Gunther spun at Turn 1 on the final lap dropping to sixth.
"Unfortunately it's been a pretty average race for us as a team. We struggled for pace a lot, especially towards the end of the race. You only have to look at Leclerc's pace to see that.
"After he overtook Felix he pulled out a gap of almost three seconds in two laps.
"Lance [Stroll] struggled towards the end as well dropping from fourth to seventh.
"So it's not been the best of weekends for me in particular by a long chalk. In practice and qualifying we were pretty fast. But in that race we definitely struggled a lot.
"Maybe if I hadn't had such bad luck in qualifying things might have turned out for the better."
Dennis is now hoping for a turnaround in his fortunes at the next round in Pau.
"I've been pretty competitive around Pau in the last couple of years," he added. "So hopefully I can get a good result or two there."