Рабочее

Меня Д. попросил разобраться с глючком его измерительной программы, с которой я последний раз имел дело еще до нашествия индусов, и смутно помню, что размер исполняемого файла был тогда около 70 мегабайт. Сейчас он подрос до 135 или около того, а папка проекта весит больше гигабайта, и там реально есть монструозные исходники по десятку мегабайт. Д. в этом коде ориентируется, вплоть до номеров строк. "Ищи это место примерно на 60800-й строке такого-то файла".
Программа при попытке сохранения очень большого массива данных вылетает с ошибкой "Out of Memory".
Я в последние несколько дней до отъезда Д. сделал то, что собирался сделать еще 10 лет назад, но тогда не хватило духу. Написал утилитку, которая перегнала его сотню dbf файлов (dBase, если для кого-то это название еще хоть что-то говорит) в SQLite. С помощью Грока, естественно, самому это было слишком лень. И еще несколько подобных динозавров мигрировал в нечто более-менее поддерживаемое. Поэтому, ожидаемо, в моей версии кода никакого Out of Memory не происходит. Но ее надо много-много тестировать. Взял версию Д., ошибка воспроизвелась, что хорошо. В пятницу догадался, где может быть проблема. Д. любит делать выборки из объединений гигантских таблиц, я и не подозревал, что dBase поддерживает такие размеры. Но всему есть предел. Д, однако, уже уехал, а без него поиск и отладка заняли бы долгое время, решил отложить до следующей недели.
Сегодня ночью приснилось точное место, где это происходит. Вскочил, достал лаптоп, влез в код. Естественно, приснилась чушь какая-то. Но раз уж включил, не выключать же. Повалялся часок с лаптопом, и нашел таки. Исправил. Очень доволен.
Решительно не понимаю, что мне не нравилось в этой работе до нашествия индусов. Ну да, у нас очень много кривого кода. Но ведь это так интересно. И осмысленно. В отличие от. Воистину, купи козу - продай козу.
|
</> |