首页 > 解决方案 > 在设计文档树模型时,加载或查询该模型的方法是否应该是异步的?

问题描述

我很难提出这个问题,尤其是这实际上是两个相关的问题。

我将创建一个库,该库对任何 dotnet 库/包/项目的 API 文档进行建模,以供以后使用以实时表示此类 API 文档,而无需工具来生成文档的 html 形式或不使用智能感知。

它的基础是某种通用文档模型,对命名空间/程序集树、类型、类型成员、扩展方法等以及相关文档(如果有)进行建模。可能有两个文档来源,但它们各自的工作方式不同。一种是带有预计算文档的数据库。在这种情况下,我可以打开数据库,并对其进行惰性查询以获取模型的其他部分。数据库很有用,因为我不必从不同来源加载文档,也不必将整个文档树保存在内存中。

第二个来源是编译器 api。因此,通常,从 c# 源文件(如果有)或程序集 + xml 文档或 nuget 包或上述任何组合加载文档树。在这种情况下可能不太可能进行延迟加载,因为例如,在命名空间树视图的情况下,这意味着查看所有已加载程序集的所有命名空间等。所以,这意味着整个文档树模型是在记忆中。

所以:

使用该库的应用程序可能主要使用数据库,但尚不确定。

标签: c#.netasynchronouscachingmodel

解决方案


每当有很多 IO 要做异步时,IMO 都应该使用,无论并行完成多少 CPU 密集型工作。因为如果完成了 IO-bound 工作,则可能存在可用于 UI 线程的 CPU 空闲时间,因此可能加载和显示文档模型的应用程序在加载时仍然是响应式的。

对于模型提供的方法,答案是它取决于它们所做的 IO 工作量。如果他们不做太多 IO 工作,那么就不需要异步。


推荐阅读