Есть идеи, почему эта простая программа (создание сеанса PowerShell) так много памяти (~ 150 МБ)?

Я новичок в программировании на PowerShell. Я создаю удаленные сеансы для программного выполнения некоторых команд. Однако он потребляет очень много памяти (порядка ~ 150–200 МБ). Чем больше сессий, тем больше памяти.

Не могли бы вы помочь мне разобраться в проблеме?

  1. В чем причина?
  2. Как я могу это исправить?

Наблюдения: 1. После выполнения команды CreateRunSpace он занимает около 3 МБ.


Кто-то столкнулся с той же проблемой при создании пространств выполнения:

http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/69ccce9d-4696-4886-a5d0-5d2d2e1e4e6d

" Возможная утечка дескрипторов пространства выполнения PowerShell »

Все еще исследуются, чтобы найти ответ…

Удаление pssession заставило пространство выполнения освободить дескрипторы и устранило утечку памяти. Теперь он переключается между ~ 30 и 40 МБ.


Спасибо!

(FYI - ссылка на System.Management.Automation.dll)

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation.Runspaces;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            int success = 0;
            int fails = 0;
            for (int i = 0; i < 50; i++)
            {
                Runspace rs = RunspaceFactory.CreateRunspace();
                //After this the memory will be incremented by ~3Mb in taskmanager
                rs.Open();
                using (Pipeline pl = rs.CreatePipeline())
                {
                    Command cmd = new Command("new-pssession");
                    pl.Commands.Add(cmd);
                    var retval = pl.Invoke();
                    if (retval.Count > 0)
                    {
                        success++;
                    }
                    else
                    {
                        fails++;
                    }
                    pl.Stop();
                }
                rs.Close();
                rs = null;
            }
            GC.Collect();

        }

    }
}

5
задан Dreamer 10 November 2011 в 22:00
поделиться