Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Excel-Automation Arbeitsspeicher (https://www.delphipraxis.net/196224-excel-automation-arbeitsspeicher.html)

ZYLAGON 2. Mai 2018 13:06

Excel-Automation Arbeitsspeicher
 
Hallo zusammen,

warum zeigt der Taskmanager nach Beendigung der erzeugten Excelinstanz keine Änderung des Arbeitsspeichers an?

Folgendes mit XE3 erzeugtes Minimalprogramm:

Delphi-Quellcode:
unit Test_EXCEL_OLE;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    fExcel:Variant;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
begin
  fExcel:=CreateOleObject('Excel.Application');
  fExcel.Application.SheetsInNewWorkBook:=3;
  fExcel.Workbooks.Add;

  fExcel.Sheets[1].Name := 'Test';
  fExcel.Visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if VarType(FExcel)<>varEmpty then
    begin
      fExcel.Quit;
      fExcel:=unassigned;
    end;
end;

end.
Starte ich die Anwendung, zeigt der Taskmanager eine Belegung von 1.740K Arbeitsspeicher an.
Wird Button 1 gedrückt (zum Erstellen der Instanz mit sichtbarem Worksheet), zeigt der Taskmanager eine Belegung von 1.960K Arbeitsspeicher an.
Wird Button 2 gedrückt (Instanz schließen mit Quit und unassigned), bleibt der angezeigte Arbeitsspeicher ungefähr gleich (1.924K), hätte aber erwartet, den Ausgangswert von 1.740K wieder zu erreichen.

Kann jemand helfen?


VG ZYL

Bernhard Geyer 2. Mai 2018 13:21

AW: Excel-Automation Arbeitsspeicher
 
As Designed,
Delphi hat einen eigenen Memory-Manager der den Speicher von Windows in größeren Blöcken abholt und nicht umbedingt wieder an Windows zurückgiebt.

Ebenfalls wird durch die Verwendung von OLE/COM einiges an Speicher angefordert welches erst beim Beenden der Anwendung wieder freigegeben wird.

himitsu 2. Mai 2018 14:02

AW: Excel-Automation Arbeitsspeicher
 
Außerdem wird im Taskmanager standardmäßig die "falsche" Speicher-Spalte angezeigt.

"zugesicherte Größe" ist das, was wirklich reserviert wurde, inklusive dem, was z.B. ausgelagert wurde.
Der standardmäßig angezeigte "private Arbeitssatz" ist sowas von unwichtig, vorallem wenn alle Programme zusammen dein Programm zur Auslagerung zwingen, darum vielleicht auch mal auf die "Seitenfehler" schauen ... da ist jeder Speicherzugriff auf ausgelagerten Speicher, der erst zurück geladen werden muß und somit das Programm langsamer macht. (ein bissl ist OK, aber wenn weit über x0.000, dann über mehr physischen RAM nachdenken oder "zugesichert" speicherhungrige Anwendungen entsorgen)

Bis Win7 im Menü Ansicht und bei Win10 im Kontextmenü des Grid-Headers.

ZYLAGON 2. Mai 2018 18:38

AW: Excel-Automation Arbeitsspeicher
 
OK, danke für die Inputs.

VG ZYL


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz