DrawString метод настраивает точки глифов с целью оптимизации качества отображения и может отображаться строка уже, чем указано в значении MeasureString.Для получения метрики, подходящей для соседних строк (например, если реализуется отформатированный текст), используйте MeasureCharacterRanges метода или один из MeasureString методов, принимающих StringFormat, и передать GenericTypographic.Кроме того, необходимо TextRenderingHint для Graphics — AntiAlias.
А вы не закрываются ли сокеты по таймауту? Когда я реализовывал сервер, то я делал, что-бы клиенты периодически писали серверу (500 мс), что они подключены и опрашивали на предмет новостей. Сервер, если клиент не отвечал в течении 1,5 мин выключал клиента (зачем впустую расходовать память)
Ну тогда, стоит посмотреть уроки по компьютерному зрению на примере OpenCV, там не так уж сложно, думаю проще чем нейронные сети. EMGU - это можно сказать "обертка" над OpenCV, можно выбрать ее если используете C#.
Думаю лучше фотографии хранить не в БД, а на ЖД, так как использовать вы их будите не часто, а СУБД и так память занимает, зачем доп. расход?