![]() |
CPU Auslastung für ein Programm begrenzen
Liste der Anhänge anzeigen (Anzahl: 1)
hi @ all,
ich hab mir ein Programm gebastellt, was ein .txt file (Größe ca. 2,5 MB) einließt, und als .xls file (Größe ca. 8,5 MB) ausgibt. klappt alles wunderbar... nur als ich gestern meinen taskmanager mit angezeigt hab während ich das programm hab laufen lassen, hat mich fast der schlag getroffen.... mein programm schnappt sich denn bei programm start verfügbaren cpu und arbeitsspeicher und belegt diesen für die laufzeit des programmes (ca. 5-10 min.) komplett!!!! (siehe bild) das find ich gerade nicht toll, da das ein weiter arbeiten am pc unmöglich macht :wall: gibt es eine möglichkeit das ich denn arbeitsspeiche und cpu begrenze denn sich das programm nehmen will bzw. nehmen darf??? |
Re: CPU Auslastung für ein Programm begrenzen
Wenn es möglich ist, dann wird dein Programm aber langsamer arbeiten. Dann ist die Frage, was besser ist.
|
Re: CPU Auslastung für ein Programm begrenzen
Hallo,
ich kann Deinem Screenshot nicht entnehmen, dass das Programm den ganzen Arbeitsspeicher belegt. Da steht doch: "Verfügbar: 144416KB". Was die Prozessorauslastung angeht: Jedes Programm versucht, so viel Prozessorzeit zu nutzen wir möglich. Das ist auch so gewollt. Eigentlich sollte Windows dafür sorgen, dass auch alle anderen Programme nicht zu kurz kommen. Wenn Du also Dein Programm nicht auf TimeCritical gestellt hast, sollte das kein Problem darstellen. Wenn doch, dann poste mal etwas Code, für Deine Aufgabe scheinen mir 5-10 Min. irgendwie etwas hoch. Gruß xaromz |
Re: CPU Auslastung für ein Programm begrenzen
Hast Du in der Verarbeitungsroutine, ich nehme an eine Schleife, auch
Delphi-Quellcode:
eingebaut?
Application.ProcessMessages
Wenn nicht ist es schwierig für andere Processe die CPU zu bekommen. Ich finde es gut wenn ein Programm sich soviel CPU nimmt wie noch da ist, aber auch nur dann wenn es sich kooperativ verhält. Application.ProcessMessages ist dann sinnvoll wenn ein Programm lange Schleifen abzuarbeiten hat. Es ermöglicht es dem Programm Messages die für das Programm bestimmt sind abzuarbeiten. Das Programm erscheint dann nicht so, als ob es eingefroren wäre. Grüße Klaus |
Re: CPU Auslastung für ein Programm begrenzen
Könntest du die Verarbeitung nicht in einem separaten Thread machen und diesem eine geringere Priorität zuordnen? Dann würde dein Programm zwar immernoch 100% CPU-Last erzeugen, andere Programme würden aber dennoch besser laufen, da die Priorität des Threads geringer ist...
|
Re: CPU Auslastung für ein Programm begrenzen
@nils_13
ob mein programm 10 min oder 20 min im hintergrund läuft is mir jux so lang ich an meinem pc vernünftig weiter arbeiten kann, stellt das ja dann kein problem dar wie lang das läuft... einfach auf minimieren gehen nach programm start und das programm meldet sich dann von selber zu wort wenns fertig is durch en showmessage ^^ |
Re: CPU Auslastung für ein Programm begrenzen
Hallo,
Zitat:
![]() Gruß xaromz |
Re: CPU Auslastung für ein Programm begrenzen
Zitat:
|
Re: CPU Auslastung für ein Programm begrenzen
Zitat:
Zitat:
hmm wieso sollt das zuviel zeit sein 5-10 min??? Source Code werd ich noch posten aber in nem extra beitrag... @klaus01 nein das application.processmessages hab ich noch nicht drinne... inwiefern kann mir das helfen bzw. was bewirkt das??? @dominik.boehm ich hab leider noch nicht mit threads gearbeitet bzw. einen thread programmiert! hat sonst noch jemand ne idee wie ich das hinkriege??? |
Re: CPU Auslastung für ein Programm begrenzen
hier noch der source code von der routine die das excel erstellt:
Delphi-Quellcode:
procedure TMain_Form.prCreateXls(iAnzRec : Integer);
var bl : Boolean; oleExcelApp, oleExcelSheets, oleExcelWorkb : OleVariant; i, iCell, iCount, iRow : Integer; sDate, sFile, sPath, sRow, sXlsFile : String; txtFile : TextFile; wRC : Word; begin //Paths sDate := FormatDateTime('yyyymmdd', Date); sFile := 'U:\Programmierung\LOG\Router_Tab\Excel\ROUTES_TAB_' + sDate; sPath := '..\Output\ROUTES_Convert_' + sDate + '.txt'; //Create .xls / Set Column Format / Create Header oleExcelApp := CreateOleObject('Excel.Application'); oleExcelWorkb := oleExcelApp.Workbooks.Add; oleExcelSheets := oleExcelworkb.WorkSheets.Add; oleExcelSheets.Name := 'Router Tab vom ' + sDate; iRow := 1; For i := 1 To 7 Do Begin oleExcelSheets.Columns[i].NumberFormat := '@'; End; For i := 1 To 7 Do Begin iCell := i; oleExcelSheets.Cells[iRow, iCell].Font.FontStyle := 'Bold'; If i = 1 Then oleExcelSheets.Cells[iRow, iCell].Value := 'Land'; If i = 2 Then oleExcelSheets.Cells[iRow, iCell].Value := 'PLZ Von'; If i = 3 Then oleExcelSheets.Cells[iRow, iCell].Value := 'PLZ Bis'; If i = 4 Then oleExcelSheets.Cells[iRow, iCell].Value := 'O - Sort'; If i = 5 Then oleExcelSheets.Cells[iRow, iCell].Value := 'D - Depot'; If i = 6 Then oleExcelSheets.Cells[iRow, iCell].Value := 'D - Sort'; If i = 7 Then oleExcelSheets.Cells[iRow, iCell].Value := 'Barcode ID'; End; //Assign .txt File for Input {$I-} AssignFile(txtFile, sPath); Reset(txtFile); iCount := 100; iRow := 2; While Not EOF(txtFile) Do Begin Readln(txtFile, sRow); //Add sRow to Excel Cells For i := 1 To 7 Do Begin iCell := i; If i = 1 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 1, 2); If i = 2 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 3, 9); If i = 3 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 12, 9); If i = 4 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 21, 4); If i = 5 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 25, 4); If i = 6 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 29, 4); If i = 7 Then oleExcelSheets.Cells[iRow, iCell].Value := Copy(sRow, 33, 3); End; iRow := iRow + 1; //Set Progress in Progress Bar If iRow = iCount Then Begin ProgBar2.Position := Round((100 * iRow) / iAnzRec); iCount := iCount + 100; End; End; CloseFile(txtFile); {$I+} //Examine whether File is present bl := FileExists(sFile + '.xls'); If bl = True Then Begin wRC := MessageDlg('File is allready present!' +#13+ 'Clear File?', mtInformation, mbYesNo, 0); If wRC = mrYes Then Begin bl := DeleteFile(sFile + '.xls'); If bl = False Then Begin ShowMessage('Error with File Clear!'); End; End Else Begin ShowMessage('File would be Overwritten!'); End; End; //Save as .xls File sXlsFile := ChangeFileExt(sFile, '.xls'); Try oleExcelWorkb.Close(true, sXlsFile, false); Except ShowMessage('Save To File Error'); End; //Excel freigeben oleExcelSheets := Unassigned; oleExcelWorkb := Unassigned; oleExcelApp.Quit; oleExcelApp := Unassigned; ProgBar2.Position := 0; lbl_sts_xls.Caption := 'Export to Excel. OK'; lbl_sts_xls.Font.Size := 8; lbl_sts_xls.Font.Color := clGreen; Main_Form.Refresh; bitbtn_exit.Enabled := True; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz