After the release of Mma 11, I introduced, according with Sander suggestion, two new codes with the function Ramp[].
The codes are sorted to emphasize their efficiency.
At the moment, there are 19 codes.
List with 1 mln random generated real elements
First, I have done tests on a list with 1 mln numeric elements
list = RandomReal[{-10, 10}, 1000000];
and AbsoluteTiming 48 repetitions:
ta = Table[tList = {
(* 1 *) Total@Ramp@list // AbsoluteTiming,
(* 2 *) Total@Clip[list, {0, \[Infinity]}] // AbsoluteTiming,
(* 3 *) Plus @@ Ramp@list // AbsoluteTiming,
(* 4 *) Plus @@ Clip[list, {0, \[Infinity]}] // AbsoluteTiming,
(* 5 *) Total@Select[list, Positive] // AbsoluteTiming,
(* 6 *) Total@Cases[list, _?Positive] // AbsoluteTiming,
(* 7 *) Plus @@ Cases[list, _?Positive] // AbsoluteTiming,
(* 8 *) Total@Cases[list, x_ /; x > 0] // AbsoluteTiming,
(* 9 *) Plus @@ Cases[list, x_ /; x > 0] // AbsoluteTiming,
(* 10 *) Plus @@ Select[list, # > 0 &] // AbsoluteTiming,
(* 11 *) Total[list /. b_?Negative -> 0] // AbsoluteTiming,
(* 12 *) Total[list /. x_ /; x < 0 -> 0] // AbsoluteTiming,
(* 13 *) Total@Map[If[# < 0, 0, #] &, list] // AbsoluteTiming,
(* 14 *) Plus @@ Map[If[# < 0, 0, #] &, list] // AbsoluteTiming,
(* 15 *)(s = 0; l = Length[list];
Do[If[list[[i]] > 0, s += list[[i]], s], {i, l}]; s) //
AbsoluteTiming,
(* 16 *)(s = 0; l = Length[list];
Table[If[list[[i]] > 0, s += list[[i]], s], {i, l}][[l]]) //
AbsoluteTiming,
(* 17 *)(pcf = Function[x, Piecewise[{{x, x > 0}}, 0], Listable];
Total[pcf[list]]) // AbsoluteTiming,
(* 18 *)(s = 0; l = Length[list];
For[i = 0, i <= l, i++, If[list[[i]] > 0, s += list[[i]], s]];
s) // AbsoluteTiming,
(* 19 *)(s = 0; i = 1; l = Length[list];
While[i <= l, If[list[[i]] > 0, s += list[[i]], s]; i++]; s) //
AbsoluteTiming
};
BarChart[tList[[All, 1]], PlotRange -> {{-.01, 19.5}, {0, 4}}]
, {48}];

Time results for the last 48th test:
In[1]:= AbsTiming = tList[[All, 1]]
Out[1]= {0.00773412, 0.0147376, 0.273374, 0.285654, 0.659804, \
0.799176, 0.794375, 0.980972, 0.982004, 1.07851, 1.22457, 1.39598, \
1.75444, 1.76957, 2.60787, 2.97176, 3.15208, 3.39943, 3.73759}
In[2]:= AbsTiming/AbsTiming[[1]]
Out[2]= {1., 1.90553, 35.3465, 36.9342, 85.3108, 103.331, 102.711, \
126.837, 126.97, 139.448, 158.333, 180.496, 226.844, 228.8, 337.19, \
384.241, 407.556, 439.537, 483.26}
For the same list with 1 mln elements, the results of 48 tests with RepeatedTiming in one GIF

The time results of the last 48th test:
In[3]:= RepTiming = tList[[All, 1]]
Out[3]= {0.0076, 0.015, 0.291, 0.294, 0.708, 0.8480, 0.843, 1.02, \
1.04, 1.2, 1.3, 1.5, 1.84, 1.85, 2.87, 3.13, 3.39, 3.7516, 4.01}
In[4]:= RepTiming/RepTiming[[1]]
Out[4]= {1.0, 2.0, 38., 39., 9.*10^1, 1.1*10^2, 1.1*10^2, 1.3*10^2,
1.4*10^2, 1.5*10^2, 1.8*10^2, 2.0*10^2, 2.4*10^2, 2.4*10^2, 3.8*10^2,
4.1*10^2, 4.5*10^2, 4.9*10^2, 5.3*10^2}
Remark, the first code is 2 times faster than the second code and 530 times faster than the 19th code.
Short list with 20 random generated real elements
Third, I have done tests for a short list with 20 elements and with 120 repetitions with AbsoluteTiming[]

Time results for the last 120th test:
In[5]:= absTiming = tList[[All, 1]]
Out[5]= {0.0000112407, 0.0000156393, 0.0000136844, 0.0000141731, \
0.0000244364, 0.0000263913, 0.0000205266, 0.0000293237, 0.0000239477, \
0.0000259026, 0.0000498502, 0.0000474066, 0.000044963, 0.0000390982, \
0.0000606022, 0.000061091, 0.0000752641, 0.000077219, 0.0000767303}
In[6]:= absTiming/absTiming[[1]]
Out[6]= {1., 1.3913, 1.21739, 1.26087, 2.17391, 2.34783, 1.82609, \
2.6087, 2.13043, 2.30435, 4.43478, 4.21739, 4., 3.47826, 5.3913, \
5.43478, 6.69565, 6.86957, 6.82609}
Fourth, I have done tests with on the same short list with 20 elements with 120 repetitions with RepeatedTiming

Time results for the last 120th test:
In[7]:= repTiming = tList[[All, 1]]
Out[7]= {2.016*10^-6, 5.33*10^-6,
7.16*10^-6, 0.0000110, 0.000019, 0.00002111, 0.0000189, 0.0000249, \
0.00002229, 0.0000230, 0.0000373, 0.0000408, 0.0000387, 0.0000360, \
0.0000532, 0.0000568, 0.0000664, 0.0000718, 0.00009}
In[8]:= repTiming/repTiming[[1]]
Out[8]= {1.000, 2.64, 3.55, 5.48, 9.2, 10.47, 9.4, 12.3, 11.06, \
11.4, 18.5, 20.2, 19.2, 17.8, 26.4, 28.2, 32.9, 35.6, 4.*10^1}
Conclusions
The function Ramp[] together with Total[] is more faster than all the rest of codes as for large lists as for short lists.
These results may serve as a good bases to construct efficient summations in other situations and cases.
These codes are good to use in classrooms as examples of good/efficient and bad/non-efficient programming.