0

我正在编写一个小应用程序,以从大量样本中提取每种特定类型的一些有效样本。

结构如下:

根->状态->类型->样本

我的程序遍历各州,并获取每种独特的类型以及通往该类型的路径。一旦获得所有这些,它就会遍历每种类型,并选择 X 个随机样本,其中 X 由用户提供。

该程序在本地运行良好,但在网络上它显然要慢得多。我已经采取措施来解决这个问题,但我挂断的最后一部分是快速从 TYPE 目录中获取随机样本。

在本地,我使用

    List<String> directories = Directory.GetDirectories(kvp.Value).ToList();

这是通过网络运行它时的瓶颈。我觉得这可能是不可能的,但是有没有办法从 TYPE 目录中抓取 5 个随机样本而不首先识别所有样本?

希望我已经足够清楚了,谢谢。

4

2 回答 2

0

您可能会发现使用 DirectoryInfo 对象作为您想要的根目录和子文件夹并以这种方式列出目录会提高速度。这将使您的速度略有提高,因为 .NET 的惰性初始化策略意味着使用您在示例中使用的静态 Directory 方法将需要更多的网络往返。

我想的下一个问题是为什么速度很重要?您是否考虑过在自己设计的缓存中维护最新索引以实现快速访问?使用 FileSystemWatcher、定期轮询,还是两者都使用?

我想你可能也对这个链接感兴趣:检查文件夹是否有文件

...它包含一些有关通过从一次调用中检索有关整个目录结构的信息来将网络调用限制在最低限度的信息。然而,这无疑会增加您的内存需求。

每种文件的名称是否可预测?随机预测一些样本名称并直接阅读它们会更好吗?

于 2013-04-23T18:49:58.913 回答
0

也许尝试使用 DirectoryInfo,当对特定目录进行大量调用时,它会更快,因为不会在每次访问时检查安全性。

于 2013-04-23T18:39:39.013 回答