我正在开发一个远程扫描服务器并收集有关它们的元数据的应用程序。
我正在尝试编写可以在我们的服务器上很好扩展的代码。我正在使用 TPL 同时处理多个作业。我遇到的问题是这些“作业”中的每一个都花费一半的时间等待 I/O 操作完成。
如果这些操作提供 Async 或 Begin/End 接口但它们没有,这将很容易解决。几个样本:
System.IO.Directory.GetAccessControl
Win32API 调用,例如 FindFirstFile http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx和 FindNextFile http://msdn.microsoft.com/en-us /library/windows/desktop/aa364428(v=vs.85).aspx
如何确保我的应用程序在这种情况下做得更多?我是否应该为这些创建包装器以支持异步,并且这样它们将被发送以在线程中进行处理。我应该尝试 TPL 实现 Producer/Consumer 以便同时执行所有这些 I/O 调用吗?TPL 是否足够聪明以创建更多线程,因为它们中的大多数都不会做任何事情?或者也许在这些作业中的每一个中我应该将作业添加到 ThreadPool 进行处理?