A clinical batting performance from Sri Lanka followed a shambolic effort in the field earning them an 8 wicket win and a 2-1 series lead.
It was a match that saw three centurions, one for Zimbabwe and two for the hosts as openers Niroshan Dickwella and Danushka Gunathilaka went big.
Hamilton Masakadza ended a long wait for an ODI century as he survived a dropped chance to notch 111 top scoring for the hosts as they posted 310/8 in their fifty overs.
No other Zimbabwe batsman could get passed fifty though and they will feel they missed out on an absolute road.
Tarisai Musakanda (48) and Sean Williams (43) made contributions while Sikandar Raza (25*) and Peter Moor (25) gave it a real whack at the death.
Wanindu Hasaranga (2/44) was the pick of the Sri Lanka bowlers as he made his second ODI appearance after claiming a hat-trick on debut in Galle.
In reply the Lankan openers blew Zimbabwe out of the water with a massive 229 run opening partnership.
Dickwella (102) was dropped on 64 before racing to his maiden ODI hundred before sweeping Malcolm Waller to deep square leg.
Gunathilaka (116) fell shortly afterwards hitting a six, being dropped and then getting castled by Williams in the 38th over ending a career best knock but Zimbabwe failed to make further inroads.
Upul Tharanga (44*) and Kusal Mendis (28*) were dropped off successive deliveries from Sikandar Raza before leading Sri Lanka home.
Sri Lanka lead the five match series 2-1 after three matches.