У меня есть приложение, содержащее кучу разделов, каждый из которых содержит данные, для расчета которых требуется значительное время. Я вижу несколько подходов к этому:
Простое решение 1: Рассчитать данные во всех разделах при запуске приложения. Это означает, что запуск приложения будет медленным.
Простое решение 2: вычисляйте данные в каждом разделе по мере их загрузки пользователем. Это означает, что загрузка каждого раздела будет медленной (что плохо, потому что каждый раздел уже должен выполнять значительные вычисления рендеринга, поэтому они уже немного медленные.
Поскольку для этого приложения критически важна производительность, ни одно из этих решений не является идеальным. Итак, это подводит меня к менее простому решению: при запуске приложения начать вычисление данных раздела в фоновом потоке. Проблема с этим решением заключается в том, что у меня нет хорошего способа предсказать, какой раздел пользователь загрузит первым. Поэтому, если они загрузят последний раздел для загрузки в фоновом потоке, они в конечном итоге будут ждать дольше, чем если бы я только что выбрал решение 2.
Итак, это подводит меня к решению: при запуске приложения начать вычисление данных раздела в фоновом потоке, но когда пользователь загружает раздел, приостановить фоновый поток и начать расчет для раздела, запрошенного пользователем. Если только расчет уже не запущен, в этом случае вы даете ему завершиться.
Я не уверен, как реализовать решение 4. Я думаю, что самое простое решение, вероятно, состоит в том, чтобы использовать очередь с приоритетами и просто повышать приоритет задачи при ее загрузке, но я не уверен, как реализовать это на С#. Это разумный подход? Какие хорошие библиотеки существуют для приоритетных очередей в C#?