Как найти объем физической памяти занятым хешем в Perl?

     @IBAction func nextbtnpreesd(_ sender: Any) {

            let mystring = "2"
            performSegue(withIdentifier: "MusicVC", sender: mystring)
        }



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {


        if let destination = segue.destination as? MusicVC{

            if let song = sender as? String{
                destination.strlablevalie = song
            }
        }
    }

// в MusicVC создать строку вроде:

 var strlablevalie:String!
17
задан brian d foy 8 October 2008 в 07:18
поделиться

7 ответов

Devel:: Размер является ответом на Ваш вопрос. (Обратите внимание что Devel:: Размер временно выделит существенный объем памяти при обработке большой структуры данных, таким образом, это не действительно хорошо подойдет для этой цели.)

Однако Кэш:: SizeAwareMemoryCache и Связь:: Кэш уже реализация, что Вы ищете (с несколько различными интерфейсами) и могли сохранить Вас от изобретения велосипед.

Memoize является модулем, который делает простым кэшировать возвращаемое значение от функции. Это не реализует основанный на размере предел кэша, но должно быть возможно использовать Связь:: Кэш как бэкенд для Memoize.

27
ответ дан 30 November 2019 в 10:54
поделиться

Вы ищете Devel:: Размер

ИМЯ

Devel:: Размер - расширение Perl для нахождения использования памяти переменных Perl

РЕЗЮМЕ

use Devel::Size qw(size total_size);

my $size = size("A string");
my @foo = (1, 2, 3, 4, 5);
my $other_size = size(\@foo);
my $foo = {a => [1, 2, 3],
        b => {a => [1, 3, 4]}
       };
my $total_size = total_size($foo);
11
ответ дан 30 November 2019 в 10:54
поделиться

Можно установить Devel:: Размер для обнаружения памяти, взятой любой конструкцией в Perl. Однако знайте, что это возьмет большой объем промежуточной памяти, таким образом, я не использовал бы его против большой структуры данных. Я, конечно, не сделал бы этого, если Вы думаете, что можно собираться закончиться память.

BTW там являются многими хорошими модулями на CPAN, чтобы сделать кэширование в памяти и иначе. Вместо самокрутки я предложил бы использовать одного из них вместо этого. Например, попробуйте Связь:: Кэш:: LRU для кэша в оперативной памяти, который только подойдет к конкретному количеству ключей.

5
ответ дан 30 November 2019 в 10:54
поделиться

Если Вы волнуетесь об управлении объемом памяти, который использует Perl, необходимо, вероятно, посмотреть на альтернативный подход. Почему Вам нужно так много в RAM внезапно? Необходимо ли использовать своего рода систему персистентности?

1
ответ дан 30 November 2019 в 10:54
поделиться

Кэш:: Память

use Cache::Memory;

my $cache = Cache::Memory->new(
  namespace => 'MyNamespace',
  default_expires => '600 sec'
);

my $size  = $cache->size()
my $limit = $cache->size_limit();
1
ответ дан 30 November 2019 в 10:54
поделиться

Можно использовать Devel:: Размер для определения используемой памяти но Вы не можете обычно давать память возврата ОС. Это кажется, что Вы просто пытаетесь очистить и снова использовать, тем не менее, который должен хорошо работать.

, Если кэш для функции, рассмотрите использование модуль Memoize вместо того, чтобы поддержать кэш сами. Это поддерживает истечение кэша (через Memoize:: Истеките), таким образом, можно ограничить размер кэша, не уничтожая его полностью.

2
ответ дан 30 November 2019 в 10:54
поделиться

Как другие сказали, кэширование не является колесом, которое необходимо заново изобрести, существует много простых решений для кэширования на CPAN, который сделает задание приятно для Вас.

Кэш:: SizeAwareMemoryCache можно сказать максимальный размер, который Вы хотите, чтобы он использовал, затем можно оставить это заботе о кэше для Вас.

0
ответ дан 30 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

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