自己的程序写入300个小文件。在那段时间里,explorer.exe占用了近100%的CPU时间

时间:2016-04-19 13:29:17

标签: windows windows-8.1 windows-explorer ntfs

我开发的C#应用​​程序将300个小(1k)文件写入本地文件系统(NTFS)。 在此期间,explorer.exe最多使用100%的CPU时间。

我已经解决的事情:

  • 确保没有打开显示目标文件夹的资源管理器窗口
  • 排除目标文件夹的索引
  • 为完整驱动器提供索引
  • 停止并禁用“Windows搜索”(SearchIndexer.exe)
  • 服务

所有这些都没有效果。

当我使用Systinternals ProcessExplorer时,我看到一个繁忙的explorer.exe线程,其中大部分时间都是这样:

ntdll.dll!RtIFreeUnicodeString+0x1370

它的堆栈看起来像这样:

0  msvcrt.dll!memcpy+0x8a
1  SHELL32.dll!Ordinal755+0x75c
2  SHELL32.dll!PathYetAnotherMakeUniqueName+0x35316
3  SHELL32.dll!ExtractIconExW+0xed8
4  SHELL32.dll!ExtractIconW+0x98e5
5  SHELL32.dll!SHChangeNotification_Lock+0x4179
6  SHELL32.dll!DAD_SetDragImage+0x1018
7  SHELL32.dll!DAD_SetDragImage+0x11ef
8  SHCORE.dll!GetProcessReference+0x3f
9  ntdll.dll!RtlDestroyHeap+0x317
10 ntdll.dll!RtlFreeUnicodeString+0x17d5
11 KERNEL32.DLL!BaseThreadInitThunk+0xd
12 ntdll.dll!RtlUserThreadStart+0x34

explorer.exe在这做什么?文件系统和资源管理器之间是否存在直接依赖关系? 我该如何防止这种行为?

1 个答案:

答案 0 :(得分:4)

感谢您的所有评论。我能够追踪到Windows Defender消耗的CPU时间,该时间被explorer.exe通知了新文件

排除了一些相关的目录。

让我感到困惑的是,事实上,CPU被资源管理器消耗,而不是被防御者消耗...... 否则它会更明显