【问题标题】:Strange ProcessorAffinity issue with IEXPLORE.exeIEXPLORE.exe 出现奇怪的 ProcessorAffinity 问题
【发布时间】:2012-05-09 21:37:53
【问题描述】:

我需要启动 IE 并将关联设置到特定的单个 CPU。 运行以下 c# 代码时,正如预期的那样,notepad.exe 已启动并且其关联设置为仅 cpu2,奇怪的是 iexplore.exe 启动时其关联设置为仅 cpu0。无论我将 ProcessorAffinity 设置为什么,iexplore.exe 总是转到 cpu0。

我已经在 4 核 xp 32 位和 4 核 2008 64 位 IE8 上进行了测试。

using System;
using System.Diagnostics;
public class Launch
{

    public static void Main(string[] args)
    {
        lauchWithAffinity("c:/windows/system32/notepad.exe");
        lauchWithAffinity("c:/Program Files/Internet Explorer/IEXPLORE.EXE");
    }
    static void lauchWithAffinity(string exePath)
    {
        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = exePath;
        Process myProcess =Process.Start(start);
        myProcess.ProcessorAffinity = (System.IntPtr)4; //3rd cpu aka cpu2 
        //http://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity.aspx
    }

}

【问题讨论】:

  • 我放了一个 MessageBox.Show(myProcess.ProcessorAffinity.ToString());将 Affinity 从 15 设置为 4 后,msgbox 会打印 4,您期望什么不起作用?
  • 您是否尝试在 launchWithAffinity 方法周围放置一个 try catch 以查看是否抛出异常?

标签: c# multithreading internet-explorer


【解决方案1】:

我已经测试了您的程序,它对我来说运行良好。我什至检查了任务管理器,iexplore.exe 的亲和性设置为 CPU 2。

【讨论】:

  • 当 iexplore.exe 在 CPU 2 上运行时,您可以尝试在 CPU3 上启动第二个实例吗?它似乎总是出现在初始实例分配到的 CPU 上。
  • @user1385705:嗯,你似乎是对的。我可以像这样启动其他进程并且它们正常工作,但 iexplore 似乎对下一个实例保持相同的亲和力。我正在 Windows 7 32 位 btw 上进行测试。
  • @user1385705:实际上,我编写了另一个测试,启动 iexplore.exe 具有两个亲缘关系,然后读取系统中所有进程的亲缘关系并且它们正确显示(对于 iexplore 的两个实例,分别为 4 和 8 )。可能是任务管理器的错误?
  • 我认为任务管理器可能是错误的,但在 2 个独立的 ie 实例上运行 sunspider 基准测试,这些实例具有难以辨认的不同亲和力,加载了相同的 CPU。更奇怪的是,如果您使用不同的 url 启动它,它似乎会服从亲和力请求。没关系。我需要将 IE 锁定到单个 CPU 的原因是,当你给它多个 CPU 时,它在渲染大页面 (2MB +) 时运行速度要慢 20 倍,所以我不应该对它的行为完全不正常感到惊讶。 MS真的需要从头开始重新编写它。每隔几年重新命名它不会愚弄任何人。
猜你喜欢
  • 2013-09-24
  • 2012-01-30
  • 1970-01-01
  • 2015-12-12
  • 2011-07-18
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
相关资源
最近更新 更多