Как я могу получить доступ касательно количества хеша Perl?

Я пытаюсь позволить сборщику "мусора" моего сценария сделать лучшее задание. Существует тонна памяти, которую она должна быть в состоянии исправить, но что-то останавливает ее.

Я использовал Devel:: Цикл немного и это позволило мне становиться ближе, но я не совсем там.

Как я узнаю текущий подсчет ссылок для хеша Perl (устройство хранения данных для моих объектов)?

Существует ли способ отследить, кто держит ссылку на объект? Возможно, своего рода Связь, которая говорит, каждый раз, когда кто-то указывает, является этим объектом, помнит, кто это кто-то.

13
задан Sinan Ünür 16 February 2010 в 22:46
поделиться

2 ответа

Другие посты, вероятно, находятся в курсе причин.

Я хочу использовать WaitHandles совместно с Thread.Join ()/Thread.Abort (), когда я пытаюсь убить поток.

private readonly ManualResetEvent _ExitThreadsEvent = new ManualResetEvent(false);
private Thread _MyThread;

public void Stop()
{
    _ExitThreadsEvent.Set();

    if (_MyThread != null)
    {
        if (!_MyThread.Join(5000))
        {
            _MyThread.Abort();
        }

        _MyThread = null;
    }
}

private void MyThread()
{
    if (!_ExitThreadsEvent.WaitOne(1))
    {
        // Do some work...
    }

    if (!_ExitThreadsEvent.WaitOne(1))
    {
        // Do some more work...
    }
}

Вероятно, хорошо выяснить вашу первоначальную проблему взаимоблокировки тоже.

-121--4817484-

Делегат сохраняет ссылку на переменную, а не ее значение. Если вы хотите сохранить текущее значение (предполагая, что это тип значения), необходимо создать его локальную копию:

public void Invoke(Action<T> action)
{
    var localValue = this.Value;
    Invoke(() => action(localValue));
}

Если это изменяемый ссылочный тип, можно создать локальный клон/глубокую копию.

-121--3772196-

Вы ищете Devel:: Refcount .

17
ответ дан 1 December 2019 в 22:07
поделиться

Если вы беспокоитесь о возврате неиспользуемой памяти в ОС, вы должны знать, что в целом это невозможно. Объем памяти вашей программы Perl будет пропорционален наибольшему распределению памяти за время существования вашей программы.

См. Как сделать так, чтобы моя программа Perl занимала меньше памяти? в списке часто задаваемых вопросов Perl , а также Мини-руководство: Управление памятью Perl (как на что указал @Evan Carroll в комментариях).

6
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: