Можно ли профилировать взаимодействие с файловой системой в Ruby? - PullRequest
1 голос
/ 18 января 2011

Можно ли профилировать приложение Ruby, чтобы увидеть, насколько оно взаимодействует с файловой системой?

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

Ответы [ 3 ]

1 голос
/ 18 января 2011

Для этой цели уже есть программы с превосходными возможностями, которые вам не нужно дублировать.Я не думаю, что вам следует усложнять вашу программу специальной логической проверкой относительно неясной ошибки программирования (по крайней мере, я никогда не совершал случайно описанную вами ошибку).В таких случаях решение состоит в том, чтобы проверить характеристику производительности из вне программы.Предполагая, что вы работаете в Linux, я бы обратился к тесту / спецификации, который выполняет ваш код и наблюдает iostat (или аналогичный) в отдельном потоке

1 голос
/ 18 января 2011

Конечно, вы можете просто require 'profile вверху скрипта:

# myscript.rb
require 'profile'
Dir.entries(".").each  { |e| puts e}

$ ruby myscript.rb

(список имен файлов ...)

  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
  0.00     0.00      0.00        1     0.00     0.00  Dir#open
  0.00     0.00      0.00        1     0.00     0.00  Dir#each
  0.00     0.00      0.00        1     0.00     0.00  Enumerable.to_a
  0.00     0.00      0.00        1     0.00     0.00  Dir#entries
  0.00     0.00      0.00       56     0.00     0.00  IO#write
  0.00     0.00      0.00       28     0.00     0.00  IO#puts
  0.00     0.00      0.00       28     0.00     0.00  Kernel.puts
  0.00     0.00      0.00        1     0.00     0.00  Array#each
  0.00     0.01      0.00        1     0.00    10.00  #toplevel

Или вы можете просто передатьопция в командной строке:

$ ruby -r profile myscript.rb

Если вы хотите лучше контролировать то, что нужно профилировать, взгляните на библиотеку ruby-prof .

0 голосов
/ 18 января 2011

Я обманщик грубой силы.

File.open(path, 'r') do |file|
  ...
end
File.mv(path, path + '.hidden')    # Temporary

Если код попытается открыть файл дважды, он не найдет его во второй раз.После теста вы можете отменить переименование с помощью однострочной оболочки.В Bash (и, вероятно, в других * nix-оболочках):

for i in `ls *.hidden` ; do mv $i ${i%.hidden} ; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...