Python: Как оценить / вычисляют объем потребляемой памяти структур данных?

Я лично предпочитаю использовать класс XDocument, который был реализован в .Net 3.5.

Учитывая, что:

  • Ваша структура XML всегда одинакова
  • Вы используете .Net 3.5 или новее

Я кодировал что-то вроде этого чтобы удалить только строку, которую я выбираю с помощью строки «deleteme», которая может быть вашим «TextBox1.Text».

Как я уже писал, он будет удалять все, содержащие данную строку. Если вы уверены, что у вас есть только одна запись с данной строкой, вы можете ввести команду «Выход для», как вы это делали в своем примере.

    Dim tst_xml_path = "MyPath"
    Dim deleteme As String = ("0145191647505")
    Dim doc As New XDocument()


    doc = XDocument.Load(tst_xml_path & "tst.xml")
    For Each elem In doc.<sales_audit_xml>.<DataTable>
        If elem.<TicketNumber>.Value = deleteme Then
            MsgBox("Element " & elem.<TicketNumber>.Value & " deleted!")
            elem.<TicketNumber>.Remove()
        End If
    Next

    Console.WriteLine(doc.ToString)
    doc.Save(tst_xml_path & "tst.xml")

Итак, я попробовал ваш полный код со следующими правками:

    Public Sub Button5_Click() 'Removed the params to call the function easily.

    Dim deleteme As String = ("01451947504") 'Debug Var for string comapre
    Dim doc As New XmlDocument()
    doc.Load(path & FileXml)

    Dim Nodes = doc.SelectNodes("//TicketNumber")
    For Each elem As XmlElement In Nodes
        If elem.InnerText = deleteme Then
            elem.ParentNode.ParentNode.RemoveChild(elem.ParentNode)
            MsgBox("Element Deleted! ", MsgBoxStyle.Critical) '& TicketNumber.ToString)  'Edited the MessageBox         
        End If
    Next
    doc.Save(path & "ouput.xml") 'Edited the ouput file for debug purpose
End Sub

Я просто называю его в своей основной функции следующим образом ...

Dim Tst = New Form1
Tst.Button5_Click()

И все прошло нормально. Я могу удалить все 3 таблицы данных, которые вы написали в своем примере XML-файла ...

14
задан Torsten Marek 14 April 2009 в 22:58
поделиться

2 ответа

У Гуппи есть хороший профилировщик памяти (Heapy):

>>> from guppy import hpy
>>> hp = hpy()
>>> hp.setrelheap() # ignore all existing objects
>>> d = {}
>>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
>>> hp.heap()
 Partition of a set of 24 objects. Total size = 1464 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      2   8      676  46       676  46 types.FrameType
     1      6  25      220  15       896  61 str
     2      6  25      184  13      1080  74 tuple
 ...

Heapy немного недокументирован, поэтому вам, возможно, придется немного покопаться в веб-странице или исходном коде, но он очень мощный. Есть также несколько статей , которые могут быть уместны.

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

Вы можете сделать это с помощью профилировщика памяти, о котором я знаю пару:

  1. PySizer - возможно, устарел, поскольку домашняя страница теперь рекомендует:

  2. Heapy .

Возможно, это дубликат этого вопроса.

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

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