以上就是给各位分享如何保持ReadDirectoryChangesW缺less文件更改,同时本文还将给你拓展Directself-referenceleadingtocycle、.net–如何保持Re
以上就是给各位分享如何保持ReadDirectoryChangesW缺less文件更改,同时本文还将给你拓展 Direct self-reference leading to cycle、.net – 如何保持ReadDirectoryChangesW缺少文件更改、active-directory – 如何在完全Active Directory丢失后从Exchange 2013数据库恢复数据?、c# – 我们是否有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 如何保持ReadDirectoryChangesW缺less文件更改
- Direct self-reference leading to cycle
- .net – 如何保持ReadDirectoryChangesW缺少文件更改
- active-directory – 如何在完全Active Directory丢失后从Exchange 2013数据库恢复数据?
- c# – 我们是否有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?
如何保持ReadDirectoryChangesW缺less文件更改
有很多文件活动的时候,网上有很多关于ReadDirectoryChangesW API函数缺less文件的文章。 大多数责怪ReadDirectoryChangesW函数循环被调用的速度。 这是一个不正确的假设。 我所看到的最好的解释是在下面的post,2008年4月14日星期一下午2:15:27的评论
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/
总结是ReadDirectoryChangesW函数报告文件更改,因为它们离开文件写入队列,而不是添加它们。 如果在犯罪之前添加了太多,就会失去其中一些的注意。 你可以看到这个与你的实现,如果你只是写一个程序,以真正快速生成一个目录中的超过1000个文件。 只要记下你得到的文件事件通知的数量,你会看到有些时候你不会收到所有的事件通知。
问题是,有没有人find一个可靠的方法来使用ReadDirectoryChangesW函数,而不必每次刷新卷? 这是不允许的,如果用户不是pipe理员,也可能需要一些时间才能完成。
如果打开DDE频道的应用程序崩溃,会发生什么情况?
与本地Windows服务进行通信的“正确”方式
SetwindowPos / MoveWindow持续存在的问题
为什么Windows 8没有.NET Framework 2.0和3.5内置?
分布式locking机制.NET
同时跟踪多个进程
Windows服务挂起在启动过程中启动
WIC / WPF:System.GPS.Longitude和System.GPS.Latitude始终返回NULL(通过BitmapMetadata)
如何在C#中重新加载USB磁盘?
插入位置/位置在任何应用程序内
如果API不可靠,那么解决方法可能是您唯一的选择。 这当然可能涉及跟踪上次修改和文件名。 这并不意味着在查找更改时需要进行轮询,而是可以使用FileSystemWatcher作为触发检查的手段。
因此,如果您记录了ReadDirectoryChangesW / FSW事件发生的最后50-100次,并且您发现它正在被快速调用,则可以检测到这一情况并触发特殊条件以获取所有已更改(并已设置)的文件一个标志,以防止未来虚假FSW事件暂时)在几秒钟内。
由于有些人对此解决方案的评论感到困惑,因此我建议您应该监视事件从ReadDirectoryChangesW到达的速度,以及到达速度太快时,尝试尝试解决方法(通常是手动扫描目录)。
我们从来没有见过ReadDirectoryChangesW 100%可靠。 但是,处理这个问题的最好办法是将“报告”与“处理”分开。
我的实现有一个线程只有一个工作,重新排队所有事件。 然后第二个线程来处理我的中间队列。 你基本上是想尽可能少地阻碍事件的报道。
在高cpu情况下,您也可能阻止观察者事件的报告。
我遇到了同样的问题。 但是,我没有找到一个保证获得所有事件的解决方案。 在几次测试中,我知道应该在GetQueuedCompletionStatus函数返回后尽快再次调用ReadDirectoryChangesW函数。 我猜如果文件系统的处理速度比我的应用程序处理速度快,应用程序可能会失去一些事件。
无论如何,我将一个解析逻辑从监视逻辑中分离出来,并在一个线程上放置了一个解析逻辑。
Direct self-reference leading to cycle
Direct self-reference leading to cycle (through reference chain: java.util.ArrayList[0]->XXX["updater"]->XXXX["updator"]->XXXXX["updator"])
.net – 如何保持ReadDirectoryChangesW缺少文件更改
http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/4465cafb-f4ed-434f-89d8-c85ced6ffaa8/
摘要是ReadDirectoryChangesW函数在文件写入队列离开时报告文件更改,而不是添加文件。如果在提交之前添加太多,则会丢失其中的一些信息。您可以通过实现来看到这一点,如果您只是编写一个程序,以便在目录中快速生成1000个文件。只需计算您获得多少文件事件通知,您将看到有时您将不会收到所有这些通知。
问题是,有没有人发现使用ReadDirectoryChangesW功能的可靠方法,而不必每次刷新卷?如果用户不是管理员,也可能需要一些时间才能完成此操作。
因此,如果您跟踪ReadDirectoryChangesW / FSW事件发生的最后50-100次,并且您看到它正在快速调用,您可以检测到这一点,并触发特殊条件以获取所有已更改的文件(并设置一个标志,以防止未来的虚假FSW事件暂时)在几秒钟内。
由于有些人对有关此解决方案的评论感到困惑,因此我建议您监控事件从ReadDirectoryChangesW获得的速度以及到达速度太快时,尝试尝试解决方法(通常是手动扫描目录)。
active-directory – 如何在完全Active Directory丢失后从Exchange 2013数据库恢复数据?
Exchange服务器完全可以运行,但当然Exchange本身并非如此;但是,数据库文件是安全的,甚至可以使数据库进入干净的关闭状态.
AD域必须从头开始重建;没有真正的大损失,它是一家小公司,20台PC需要重新加入一个新域,20个用户将面临干净的用户配置文件,一些文件共享需要重新ACL,但总体来说这并不是一场大灾难(虽然它肯定告诉他们,虽然拥有一个DC只意味着要求麻烦,拥有一个DC并且没有备份它是非常疯狂的).
该公司实际上并不想再次启动Exchange:他们承认他们完全不适合运行比文件服务器更复杂的东西,并且全心全意地转向Office 365;但是,他们想要恢复他们的Exchange数据.
我可以构建我需要的任何实验室环境,从而创建一个新的AD和一个新的Exchange 2013服务器是没有问题的;但是,为了在新的AD / Exchange环境中安装恢复的数据库,我实际需要做些什么?
我几年前用Exchange 2003做过这个,它是a royal pain;它工作正常,但它需要匹配每一个Exchange配置,从AD和Exchange组织名称到数据库路径和用户名.但是,我们现在拥有Exchange 2013,它有许多很好的改进,可以使事情变得更容易:管理/路由组不再存在,新的存储架构废除了存储组,并将数据库与服务器分离,最后有传说中的database portability (但只表示在同一组织的服务器之间工作)和绝对可爱的recovery databases.
我所知道的:已解散的AD域的名称,Exchange服务器的名称,数据库名称及其文件路径,Exchange 2013版本(CU3).
我不知道的:Exchange组织的名称(我可以猜,但我不能确定),用户登录(与上面相同).
为了装入Exchange数据库并运行多个MailBoxExportRequests,还需要匹配多少这些参数?这个恢复过程是否有所改善,还是手动仍然很痛苦?恢复数据库是否有帮助(我只需要挂载数据库并导出数据,而不是实际使用它)?
它甚至可以像“只需启动一个新的Exchange服务器,创建一个空的数据库,复制恢复的文件,安装数据库并导出所有内容”一样简单……或者我们肯定还没有完全存在?
解决方法
无论组织和/或Active Directory域如何,任何Exchange 2013数据库都可以安装在任何Exchange 2013服务器上(尽管服务器可能需要相同或更高的CU级别).
如果在服务器上安装了外部数据库,它将完美地工作,甚至可以用于存储新邮箱;数据库中的所有邮箱都将被视为已断开连接的邮箱,它们可以连接到用户帐户,可以毫无问题地使用,并且(当然)可以导出.
确实是数据库的可移植性!毕竟,看起来我们还在那里.
因此,在原始环境不可用时从Exchange数据库恢复数据的过程如下:
>构建新的Active Directory域和新的Exchange 2013服务器(如果有可用的话,甚至可以使用现有的服务器);它们可以按照您的意愿命名,所有名称都完全不相关.
>创建一个新的空邮箱数据库;数据库名称和文件路径根本不重要.
>允许从还原中覆盖数据库.
>从原始服务器获取EDB文件并确保其处于干净关闭状态(如果不是,请使用eseutil和原始事务日志执行标准数据库恢复).
>将EDB文件放在新Exchange服务器期望找到新数据库的位置(如果需要,可以重命名).
>装入数据库.
>使用Get-MailBoxStatistics cmdlet获取数据库中的邮箱列表.
>根据需要创建任意数量的用户帐户,以重新连接要恢复的邮箱.
>使用Connect-MailBox cmdlet将数据库中的邮箱连接到新用户帐户.
而已;现在您可以使用恢复的maiBoxes,或者可以使用New-MailBoxExportRequest cmdlet将它们导出到PST文件.
c# – 我们是否有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?
What is the difference between Directory.EnumerateFiles vs Directory.GetFiles?
为什么,既然EnumerateFiles可用,是否需要使用GetFiles?
解决方法
The EnumerateFiles and GetFiles methods differ as follows: When you
use EnumerateFiles,you can start enumerating the collection of names
before the whole collection is returned; when you use GetFiles,you
must wait for the whole array of names to be returned before you can
access the array. Therefore,when you are working with many files and
directories,EnumerateFiles can be more efficient.
我猜GetFiles可以被认为是一个方便的功能.
今天的关于如何保持ReadDirectoryChangesW缺less文件更改的分享已经结束,谢谢您的关注,如果想了解更多关于 Direct self-reference leading to cycle、.net – 如何保持ReadDirectoryChangesW缺少文件更改、active-directory – 如何在完全Active Directory丢失后从Exchange 2013数据库恢复数据?、c# – 我们是否有理由在Directory.EnumerateFiles()上使用Directory.GetFiles()?的相关知识,请在本站进行查询。
本文标签: