![]() |
1
5
好吧,你可以一直用 FileSystemWatcher 如果要在文件更改时为您提供事件,则只能按需扫描文件。 |
![]() |
2
3
如果文本行总是相同的,那么使用regex来匹配行中的文本可能比使用string.equals()或==在文件中循环匹配文本更有效。 也就是说,我不知道在C语言中,在没有将文件打开到内存并读取行的情况下,如何在文件中找到文本。 这个 link 是一个很好的教程,介绍如何使用regex来匹配使用c_的文件中的行。 |
![]() |
3
3
除非它们是很长的线,用现代计算术语来说,1600行不是很多!文件IO将由运行时处理,并将被缓冲,速度将惊人地快,内存占用惊人地不显著。
只需逐行读取文件,或使用
这不会是你的瓶颈。 如果频繁轮询和/或不必要地使用正则表达式,则可能会出现瓶颈。最好使用文件系统观察程序,以避免在文件未更改的情况下对其进行分析。 |
![]() |
4
2
这真的取决于你对“高效”的定义。 如果您的意思是内存效率,那么您可以使用流读取器,以便一次只能在内存中有一行文本,不幸的是,这比一次加载整个文本要慢,并且可能会锁定文件。 如果您的意思是在尽可能短的时间内,那么这是一个将从并行架构中获得巨大好处的任务。将文件分割成块,并将每个块传递给不同的线程进行处理。当然,这不是特别的CPU效率,因为它可能会把你的所有核心在一个高水平的使用。 如果你只想做最少的工作,你对这个文件有什么了解吗?多久更新一次?每行的前10个字符总是相同的吗?如果你上次看了100行,你需要重新扫描这些行吗?任何这些都可以节省大量的时间和内存使用。 在一天结束的时候,虽然没有神奇的子弹,但搜索一个文件(在最坏的情况下)是一个o(n)操作。 抱歉,重读一遍,可能会觉得很讽刺,我不是故意的。我只是想强调一下,你在一个领域取得的任何成果都有可能在其他领域失去,在这种情况下,“有效”这个词非常含糊。 |
![]() |
5
2
|
![]() |
6
1
你应该能够像这样循环:
readline方法只将文件的一行加载到内存中,而不是整个文件。当循环再次运行时,对该行的唯一引用将丢失,因此,该行将在需要时被垃圾回收。 |
![]() |
7
0
我将结合使用以下两种技术: 1)。在文件上设置文件系统监视程序。设置必要的过滤器以防止误报。你不想不必要地检查文件。 2)。当fsw引发事件时,使用字符串file string=file.readAllLines()获取内容。 3)。使用简单的正则表达式来查找字符串的匹配项。 4)。如果匹配项的索引大于-1,则文件将在索引中的任何值处包含字符串。 你已经成功地避免了逐行分析文件,你 有 可能会将大量数据(尽管1600行文本并没有那么大)加载到内存中。当字符串文本超出范围时,垃圾回收器将回收它。 |
![]() |
Emopusta · 从后端到前端的图像路径不工作 2 年前 |
![]() |
Asdrubal Hernandez · Linq查询特定数组索引出错 2 年前 |
![]() |
Niyazi Babayev · 如何在表达式中动态应用表达式? 2 年前 |
|
Dansih · .Net核心自定义身份验证方案 2 年前 |
![]() |
lolorekkk · 面板插入。NET WinForm 2 年前 |