Вам дан код JPEG подобного сжатия (проект JPEG), вам нужно максимально, насколько это возможно, оптимизировать его, в том числе уменьшить потребление памяти. ВАЖНО: нужно именно оптимизировать данное решение а не переписывать его с 0!
Рекомендации:
- Профилируйте код (используйте dotTrace)
- Для начала оптимизируйте загрузку изображений и переписывайте только неэффективный код
- Пишите бенчмарки на разные методы
- Не бойтесь математики
С разными вопросами можно писать @Golrans и @ryzhes
Подсказки:
- Распаралельте DCT
- CbCr subsampling
- Используйте указатели, вместо GetPixel/SetPixel, придётся написать unsafe код
- Замените DCT на FFT (System.Numerics.Complex), нельзя использовать библиотеки, только собственная реализация!
- Помимо подсказанного в проекте ещё много узких мест (╯°□°)╯︵ ┻━┻
Как сдавать задание:
- Нужно сделать замер через JpegProcessorBenchmark до оптимизаций и запомнить Mean и Allocated по операциям Compress и Uncompress
- Сделать аналогичные замеры после оптимизаций
- Внести свой результат в таблицу в день дедлайна, ссылку на которую вам дадут позже
- Очно или онлайн за 10-15 минут рассказать какие моменты удалось найти и как оптимизировать
Дополнительное задание: В проекте debugging/managed/Volatile запустить программу в Debug и Release режиме. В чём разница между запусками? Используйте windbg, посмотрите ассемблерный код программы и объясните, что происходит.