emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/memory-usage 0d09e8a 6/9: memory-usage (memory-usage-fi


From: Stefan Monnier
Subject: [elpa] externals/memory-usage 0d09e8a 6/9: memory-usage (memory-usage-find-large-variables): New command.
Date: Tue, 1 Dec 2020 16:21:14 -0500 (EST)

branch: externals/memory-usage
commit 0d09e8adc273a2c65507a661f729ec4d8d8af173
Author: Ami Fischman <ami@fischman.org>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>

    memory-usage (memory-usage-find-large-variables): New command.
---
 memory-usage.el | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/memory-usage.el b/memory-usage.el
index 7a58c21..1f73310 100644
--- a/memory-usage.el
+++ b/memory-usage.el
@@ -141,5 +141,40 @@
     (insert "\n"))
   (goto-char (point-min)))
 
+(defun memory-usage-find-large-variables ()
+  "Find variables whose printed representation takes over 100KB."
+  (interactive)
+  (let ((min-size (* 100 1024)))
+    (pop-to-buffer "*Memory Explorer*")
+    (delete-region (point-min) (point-max))
+    ;; First find large global variables.
+    (mapatoms
+     (lambda (sym)
+       (let ((size (or (and (boundp sym)
+                            (length (prin1-to-string (symbol-value sym))))
+                       0)))
+         (when (> size min-size)
+           (insert (format "%d\tGlobal\t%s\n"
+                           size
+                           (symbol-name sym)))))))
+    ;; Second find large buffer-local variables.
+    (mapc
+     (lambda (buffer)
+       (let ((holder ""))
+         (with-current-buffer buffer
+           (mapc
+            (lambda (var-cons)
+              (let ((size (or (and (consp var-cons)
+                                   (length (prin1-to-string (cdr var-cons))))
+                              0)))
+                (if (> size min-size)
+                    (setq holder (format "%d\t%s\t%s\n"
+                                         size (buffer-name buffer)
+                                         (symbol-name (car var-cons)))))))
+            (buffer-local-variables)))
+         (insert holder)))
+     (buffer-list))
+    (sort-numeric-fields 1 (point-min) (point-max))))
+
 (provide 'memory-usage)
 ;;; memory-usage.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]