Silva stroked nine boundaries off 109 delivers as the hosts, who have already lost the series 3-1, struggled after the winning the toss and batting first on a slow-paced reused pitch.
Sri Lanka's batsmen showed more positive intent after three consecutive defeats, starting the innings with a 45-run opening partnership between Sanath Jayasuriya (26) and debutant Dilruwan Perera (30).
But England's bowlers, as they have done throughout the series, maintained their discipline and chipped away with regular wickets to reduce Sri Lanka to 159 for seven in the 37th over.
Left-armer Ryan Sidebottom, a frontrunner for the man of the series award, was England's best bowler, claiming 2-41 from his allocated 10 overs. Stuart Broad was the most successful, taking 3-36 from 9.1 overs.
Left-arm spinner Monty Panesar, playing in place of the injured Graeme Swann, was economical with 1-31 from 10 overs.
Jayasuriya cracked two sixes and one four in his 18-ball innings before driving a slower delivery from James Anderson straight to Kevin Pietersen at mid-off.
All-rounder Perera, replacing the out-of-form Upul Tharanga, impressed with his 30 from 41 balls before edging a catch behind off Sidebottom.
Three balls later skipper Mahela Jayawardene was dismissed for a second consecutive duck after spooning a catch to mid-on.
Kumar Sangakkara (26) helped add 34 runs with Silva before being bowled around his legs by part-time off spinner Owais Shah.