在C#中避免使用BinaryReader.ReadString()?

Mig*_*uel 0 c#

早上好,

在我正在编写的应用程序启动时,我需要从文件中读取大约1,600,000个条目Dictionary<Tuple<String, String>, Int32>.使用BinaryReader构建整个结构大约需要4-5秒(使用FileReader需要大约相同的时间).我分析了代码,发现在这个过程中执行最多功能的函数是BinaryReader.ReadString().虽然这个过程只需要运行一次并在启动时运行,但我希望尽可能快地完成.有什么方法可以避免BinaryReader.ReadString()并使这个过程更快?

非常感谢你.

pax*_*blo 5

你确定在继续之前绝对必须这样做吗?

我会检查将任务分配给一个单独的线程的可能性,该线程在完成时设置一个标志.然后你的启动代码简单地启动该线程并继续它的快乐方式,只有当两者都暂停时:

  • 国旗尚未设定; 和
  • 没有数据,就无法完成更多的工作.

通常情况下,速度的幻觉是足够好的,因为任何编写了闪屏的人都会告诉你.

如果你控制数据,另一种可能性就是将它存储在一个更加二进制的形式中,这样你就可以用一次命中将它全部放入(即,没有解释数据,只需读取整个数据).当然,这使得从应用程序外部编辑数据变得更加困难,但您没有将其作为一项要求.

如果要求或您不控制数据,我仍然会查看上面的第一个建议.