Как повторно использовать соединение Get-VMMServer? - PullRequest
2 голосов
/ 29 августа 2011

Я пишу приложение на C #, в котором Main () запускает несколько потоков, каждый из которых запускает командлет Get-VM. Я использую RunspacePool для этого.

В настоящее время каждый поток должен сначала запустить Get-VMMServer, а затем Get-VM. Get-VMMServer занимает около 5-6 секунд, что значительно снижает производительность. Ниже приведен фрагмент кода:

    static void Main()
    {
        InitialSessionState iss = InitialSessionState.CreateDefault();
        PSSnapInException warning;

        iss.ImportPSSnapIn("Microsoft.SystemCenter.VirtualMachineManager", out warning);

        RunspacePool rsp = RunspaceFactory.CreateRunspacePool(iss);
        rsp.Open();


        using (rsp)
        {
            ClassTest n = new ClassTest();
            n.intializeConnection(rsp);

            Thread t1 = new Thread(new ThreadStart(n.RunScript));
            t1.Start();

            Thread t2 = new Thread(new ThreadStart(n.RunScript));
            t2.Start();
            ....
        }
        ....
    }

    class ClassTest
    {
        RunspacePool rsp;

        public void intializeConnection(RunspacePool _rsp)
        {
            rsp = _rsp;
        }

        public void RunScript()
        {
            PowerShell ps = PowerShell.Create();

            ps.RunspacePool = rsp;
            ps.AddCommand("Get-VMMServer") AddParameter(...); // Doing this in every thread.

            ps.AddCommand("Get-VM").AddParameter("Get-VM", "someVM");

            StringBuilder stringBuilder = new StringBuilder();

            foreach (PSObject result in ps.Invoke())
            {
                ...
            }
        }
    }

Get-VMMServer подключается к серверу Virtual Machine Manager (если соединение еще не существует) и получает объект, представляющий этот сервер, из базы данных Virtual Machine Manager.

Я хочу, чтобы это соединение использовалось каждым потоком.

Как мне этого добиться? Есть ли способ создать это соединение уже в Main (), чтобы его могли использовать все пространства выполнения в пуле?

1 Ответ

0 голосов
/ 29 августа 2011

Вы можете попробовать сделать подключение к серверу VMM одиночным, и каждый поток будет использовать это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...