我编写了一些在大多数机器上运行良好的 WMI 代码。然而,在某些机器(几乎所有基于 SSD 的 Mac)上,此代码会导致巨大的性能问题。它会导致 WMIPrvSe 进程不断命中 I/O 其他。如果您运行另一个应用程序进行相同的观看,那么它会慢到爬行到软件变得无法使用的程度。
System.Management.WqlEventQuery queryIn;
System.Management.WqlEventQuery queryOut;
System.Management.ManagementScope scope = new System.Management.ManagementScope( "root\\CIMV2" );
scope.Options.EnablePrivileges = true;
try
{
queryIn = new System.Management.WqlEventQuery();
queryIn.EventClassName = "__InstanceCreationEvent";
queryIn.WithinInterval = new TimeSpan( 0, 0, 1 );
//queryIn.GroupWithinInterval = new TimeSpan( 0, 0, 0 );
queryIn.Condition = @"TargetInstance ISA 'Win32_DiskDrive' AND TargetInstance.InterfaceType = 'USB'";
mUSBWatcherIn = new System.Management.ManagementEventWatcher( scope, queryIn );
//adds event handler that’s is fired when the insertion event occurs
mUSBWatcherIn.EventArrived += new System.Management.EventArrivedEventHandler( USBInserted );
queryOut = new System.Management.WqlEventQuery();
queryOut.EventClassName = "__InstanceDeletionEvent";
queryOut.WithinInterval = new TimeSpan( 0, 0, 1 );
//queryOut.GroupWithinInterval = new TimeSpan( 0, 0, 0 );
queryOut.Condition = @"TargetInstance ISA 'Win32_DiskDrive' AND TargetInstance.InterfaceType = 'USB'";
mUSBWatcherOut = new System.Management.ManagementEventWatcher( scope, queryOut );
//adds event handler that’s is fired when the insertion event occurs
mUSBWatcherOut.EventArrived += new System.Management.EventArrivedEventHandler( USBRemoved );
mUSBWatcherIn.Start();//run the watcher
mUSBWatcherOut.Start();
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show( e.Message );
StopUSBWatcher();
}
有谁知道这里会发生什么?如果我删除此代码,那么它会完美运行。在其他机器上,它可以完美运行。它很奇怪。任何想法都非常感谢!