Ich arbeite an einer Windows Form Application in C# mit Visual Studio 2008, und ich habe derzeit zwei Formen MainForm
und TimeSettingForm
. MainForm
ist immer geöffnet, während TimeSettingForm
nur geöffnet wird, wenn der Benutzer auf Button
auf MainForm
klickt.Wie schlimm ist es, jede Sekunde Dateioperationen durchzuführen?
Mein Programm benötigt eine Ereignismethode, die nur einmal zu einer bestimmten Zeit jeden Tag auftritt und der Benutzer kann diese Zeit auf TimeSettingForm
wählen. Da TimeSettingForm
in der Regel geschlossen ist und die eingestellte Zeit nicht durch erneutes Öffnen MainForm
beeinflusst werden muss, habe ich eine Methode in TimeSettingForm
, die die eingestellte Zeit in .txt
Datei speichert. Die Zeit kann nur mit dem Zeitabschnitt DateTimePicker
ausgewählt werden.
Nun, ich habe eine Timer
Steuerung, die jede Sekunde läuft, und es liest ständig von der .txt
Datei der eingestellte Zeit für das Ereignis abgerufen werden, weil die Zeit leicht auf TimeSettingForm
umziehen kann, anstatt eine feste Zeit.
/*Timer control that runs every second */
private void TimerForEvent_Tick(object sender, EventArgs e)
{
string eventTime;
string fileName = GetFileName(); //Get the .txt file name here
if (File.Exists(fileName))
{
//Read line
using (StreamReader sr = new StreamReader(fileName))
{
//Event time is in format of "HH:mm"
eventTime = sr.ReadLine();
}
//Separate into hour and minute portion
DateTime dt = Convert.ToDateTime(eventTime);
int eventHour = dt.Hour;
int eventMinute = dt.Minute;
//Check if the current time matches the eventTime
DateTime DTnow = DateTime.Now;
if(DTnow.Hour == eventHour && DTnow.Minute == eventMinute && DTnow.Second == "0")
{
//The event happens
}
}
else
{
eventTime = "Time Not Set";
}
}
Dies scheint jedoch sehr ineffizient, weil es nicht nur die Überprüfung nicht halten, wenn die aktuelle Zeit die gleiche wie die eingestellte Zeit ist, aber es hält auch aus der .txt
Datei jede Sekunde lesen. Gibt es einen besseren Weg, dies zu erreichen? Ich möchte auch wissen, wie schlecht es ist, ständig Daten aus einer Datei zu lesen.
Warum nicht einen 'FileSystemWatcher' verwenden? Jede Sekunde ist ziemlich ineffizient, aber Sie tun nicht viel, abgesehen von dem Aufruf von 'File.Exists()', so dass das Endergebnis den Rechner nicht allzu sehr beeinträchtigt. Noch besser ist es, das Zeitintervall auf mindestens – DiskJunky
zu erweitern. Perfekter Anwendungsfall für einen ['FileSystemWatcher'' (https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher%28v=vs. 110% 29.aspx? F = 255 & MSPPError = -2147217396). –
Warum nicht den Wert in MainForm beibehalten? Wenn ein Ereignis oder ein Formular geschlossen wird, wird die Datei für eine so einfache Sache nicht überwacht. –