首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在设计文档树模型时,加载或查询该模型的方法应该是异步的吗?

在设计文档树模型时,加载或查询该模型的方法应该是异步的吗?
EN

Stack Overflow用户
提问于 2019-12-29 16:53:14
回答 2查看 38关注 0票数 1

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

我将创建一个库,对任何dotnet库/包/项目的API文档进行建模,以便以后使用它来表示这样的API文档,而不需要工具来生成html格式的文档,也不需要使用智能感知。

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

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

所以:

  • 从源和程序集元数据中计算文档的方法应该是异步的,还是有异步版本?它可能需要大量IO来读取c#或其他源文件/元数据/等等,但在解析源代码、读取元数据、解析xml、将所有这些转化为通用模型时,也会执行大量的

工作,并且可能还会做一些更繁重的工作,比如计算给定类型的可应用扩展方法,这可能有点麻烦。

  • 应该在模型本身中使用查询模型的方法,例如,类型描述中的方法来获取所有类型成员,是异步的,还是有异步版本的?在内存树中,我可以同步地得到答案。但是在文档数据库/缓存的情况下,我并没有将所有东西保存在内存中,因此方法将访问数据库中的数据,i/o.

也将如此。

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

EN

回答 2

Stack Overflow用户

发布于 2019-12-29 18:27:52

当有很多IO做异步时,IMO应该使用,不管并行完成多少CPU绑定工作。因为如果完成了IO绑定的工作,就会有潜在的CPU空闲时间可用于UI线程,所以加载和显示文档模型的应用程序在加载时仍然响应。

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

票数 0
EN

Stack Overflow用户

发布于 2019-12-31 14:54:55

我的想法是,从原始源加载文档的方法可以是异步的,它不会强迫我等待它,所以它不会限制我发出信号的能力。

当它转到模型时,我正在考虑大多数模型导航方法都是同步的,并且不接触缓存,只有文档模型的根对象中的顶级方法才能是异步的,并且还可以加载子项。例如,如果请求获取某些类型的信息,也会加载它的成员。如果需要在获得类型对象之后执行该决定,我可以引入一个方法来加载成员,它将是异步的。不知道如何处理上面的类型,如名称空间和程序集,但类似的东西,除了我认为一次加载所有类型的所有数据,或者在所有命名空间中加载所有类型之外,都是错误的。除非它会加载除孩子以外的所有数据,否则它可能是.没有那么糟糕,特别是如果一些单独的儿童加载方法也会存在的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59521393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档