• Sábado 20 de Abril de 2024, 07:14

Autor Tema:  Definir Que Procesadores Queremos Usar  (Leído 963 veces)

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Definir Que Procesadores Queremos Usar
« en: Sábado 6 de Mayo de 2006, 03:27 »
0
El codigo es para .NET 2.0 (no lo probé en otros) y permite correr una aplicación en un determinado conjunto de procesadores. Algunas aplicaciones como mozilla firefox 1.0.5 tienen algunos problemas al correrlos en un procesador Intel prescott de multiples procesadores con "hyperthreading" activado.

Por ejemplo una mascara "1" define que sólo correra en el primer procesador, si es "3" correrá en los dos primeros procesadores, si es "2" correrá sólo en el segundo procesador, etc. Como ven cada bit del numero corresponde a un procesador.

Código: Text
  1.  
  2. using System;
  3.  
  4. namespace StartWithAffinity
  5. {
  6.     class Program
  7.     {
  8.         static int Main(string[] args)
  9.         {
  10.             if((args.Length > 3) || (args.Length < 1))
  11.             {
  12.                 Console.WriteLine(@">StartWithAffinity ""Filename.exe"" AffinityMask ""Params""");
  13.                 return 1;
  14.             }
  15.             //Check file name
  16.             string mFileName = args[0];
  17.             if(!System.IO.File.Exists(mFileName))
  18.             {
  19.                 Console.WriteLine("The provided exe file does not exists");
  20.                 return 2;
  21.             }
  22.             //check optional mask
  23.             string mMaskString = (args.Length == 2) ? args[1] : "1";
  24.             int mMask;
  25.             try
  26.             {
  27.                 mMask = Convert.ToInt32(mMaskString);
  28.             }
  29.             catch
  30.             {
  31.                 Console.WriteLine("Bad mask: provide an int32 number");
  32.                 return 3;
  33.             }
  34.             //check optional arguments
  35.             string mArguments = (args.Length == 3) ? args[2] : "";
  36.             //Run the process
  37.             try
  38.             {
  39.                 System.Diagnostics.Process mProc = new System.Diagnostics.Process();
  40.                 mProc.StartInfo.FileName = mFileName;
  41.                 mProc.StartInfo.Arguments = mArguments;
  42.                 mProc.Start();
  43.                 mProc.ProcessorAffinity = (IntPtr)mMask;
  44.                 if(mArguments != "")
  45.                 {
  46.                     mProc.WaitForExit();
  47.                     return mProc.ExitCode;
  48.                 }
  49.                 else
  50.                     return 0;
  51.             }
  52.             catch(Exception e)
  53.             {
  54.                 Console.WriteLine(e);
  55.                 return 1000;
  56.             }
  57.         }
  58.     }
  59. }
  60.  
  61.  

P.D. Agregue el codigo fuente a la parte de recursos incluyendo ejecutable que necesita el .NET framework 2.0

P.D.2 Los argumentos tienes que ponerlos entre comillas y si en los argumentos tienes comillas tienes que escribirlas como en las cadenas de C: \"

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Definir Que Procesadores Queremos Usar
« Respuesta #1 en: Lunes 8 de Mayo de 2006, 20:43 »
0
Excelente articulo amilus.  :smartass:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io