Manually testing proxies one at a time doesn't scale once you're working with more than a handful. A small script can check dozens in the time it takes to test one by hand.
The core logic
For each proxy in your list, send a request to a known, lightweight test URL through that proxy with a short timeout, and record whether the request succeeds and how long it took. Anything that times out or errors gets marked dead.
What to measure beyond alive/dead
Response time tells you which working proxies are actually fast enough to be useful. Comparing the IP the test URL reports back against your real IP confirms the proxy is actually masking you rather than passing your address through.
Running it at scale
For a long list, running checks concurrently rather than one after another cuts the total check time dramatically, since most of the wait is network latency, not processing — a basic thread pool or async requests handles this well.