0
ほとんどのマシンでうまく動作するWMIコードをいくつか作成しました。しかし、いくつかのマシン(ほぼすべてのSSDベースのMac)では、このコードは大きなパフォーマンスの問題を引き起こします。これは、WMIPrvSeプロセスがI/O Otherを打ち続ける原因となります。同じ視聴をしている別のアプリケーションを実行すると、ソフトウェアが使用できなくなるまでクロールが遅くなります。WMIイベントウォッチャーのパフォーマンスの問題
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();
}
ここで何が起こっている可能性がありますか?このコードを削除すると完全に動作します。他のマシンでは、完全に動作します。その非常に奇妙な。どんなアイデアにも大変感謝しています!