我有一个包含一堆部分的应用程序,每个部分都包含需要大量时间来计算的数据。我可以看到一些方法:
简单的解决方案1:计算应用程序启动时所有部分的数据。这意味着应用程序启动会很慢。
简单的解决方案 2:在用户加载时计算每个部分中的数据。这意味着加载每个部分会很慢(这很糟糕,因为每个部分都必须进行大量的渲染计算,所以它们已经有点慢了。
由于性能对于此应用程序至关重要,因此这些解决方案都不是理想的。所以这给我带来了一个不太简单的解决方案:在应用程序启动时,开始在后台线程上计算部分数据。这个解决方案的问题是我没有很好的方法来预测用户将首先加载哪个部分。因此,如果他们加载最后一部分以加载到后台线程上,他们最终会等待比我刚刚使用解决方案 2 时更长的时间。
所以这给我带来了解决方案:在应用程序启动时,开始在后台线程上计算部分数据,但是当用户加载部分时,暂停后台线程并开始计算用户请求的部分。除非计算已经开始,在这种情况下你让它完成。
我不确定如何实现解决方案 4。我认为最简单的解决方案可能是使用优先级队列并在加载任务时提高其优先级,但我不确定如何在 C# 中实现这一点。这是一个合理的方法吗?C# 中的优先级队列有哪些好的库?