我很难提出这个问题,特别是这实际上是两个相关的问题。
我将创建一个库,对任何dotnet库/包/项目的API文档进行建模,以便以后使用它来表示这样的API文档,而不需要工具来生成html格式的文档,也不需要使用智能感知。
它的基础是某种通用文档模型,对名称空间/程序集树、类型、类型成员、扩展方法等进行建模,以及它们的相关文档(如果有的话)。可能有两个文档源,但每个文档源的工作方式不同。一个是带有预先计算文档的数据库。在这种情况下,我可以打开数据库,并懒散地查询它以获取模型的其他部分。数据库很有用,因为我不必从不同的来源加载文档,也不必将整个文档树保存在内存中。
第二个来源是编译器api。因此,通常,从c#源文件(如果有的话)、程序集+ xml文档、或nuget包或上述任何组合中加载文档树。在这种情况下,可能不太可能进行延迟加载,因为,例如,在名称空间树视图中,它意味着查看所有已加载的程序集的所有名称空间,等等。因此,这意味着整个文档树模型都在内存中。
所以:
工作,并且可能还会做一些更繁重的工作,比如计算给定类型的可应用扩展方法,这可能有点麻烦。
也将如此。
使用库的应用程序可能主要使用数据库,但尚不确定。
发布于 2019-12-29 18:27:52
当有很多IO做异步时,IMO应该使用,不管并行完成多少CPU绑定工作。因为如果完成了IO绑定的工作,就会有潜在的CPU空闲时间可用于UI线程,所以加载和显示文档模型的应用程序在加载时仍然响应。
对于模型提供的方法,答案是取决于他们做了多少IO工作。如果他们不做太多的IO工作,那么就不需要异步。
发布于 2019-12-31 14:54:55
我的想法是,从原始源加载文档的方法可以是异步的,它不会强迫我等待它,所以它不会限制我发出信号的能力。
当它转到模型时,我正在考虑大多数模型导航方法都是同步的,并且不接触缓存,只有文档模型的根对象中的顶级方法才能是异步的,并且还可以加载子项。例如,如果请求获取某些类型的信息,也会加载它的成员。如果需要在获得类型对象之后执行该决定,我可以引入一个方法来加载成员,它将是异步的。不知道如何处理上面的类型,如名称空间和程序集,但类似的东西,除了我认为一次加载所有类型的所有数据,或者在所有命名空间中加载所有类型之外,都是错误的。除非它会加载除孩子以外的所有数据,否则它可能是.没有那么糟糕,特别是如果一些单独的儿童加载方法也会存在的话。
https://stackoverflow.com/questions/59521393
复制相似问题