Zum Inhalt springen

AnDi_P

Mitglieder
  • Gesamte Inhalte

    65
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von AnDi_P

  1. Hallo zusammen ich bin gerade dabei eine kleine Anwendung in C# zu erstellen, die in einer Samba-Freigabe 12 gemountete Daten-Server rekursiv nach Verzeichnissen durchsucht, in dessen Name sich ein bestimmter String befinden muss. Da dieses recht viele Verzeichnisse (in mehreren Ebenen) sind, führt da kein Weg an Multithreading vorbei. Ich habe mir dazu unten aufgeführte Methode erstellt, die mit mehreren Threads (einstellbar) die Server durchsuchen soll. Erklärung dazu, wie es funktioniert: Ich starte zuerst einen Überwachungs-Thread, der eine Liste aller in der Freigabe verfügbaren Server in einem string-Array speichert, sowie danach ein boolean-Array, passend zu der Anzahl der Server. Gleichzeitig wird eine "Loading" Message im GUI angezeigt. Dann durchläuft jeder gestartete Such-Thread das boolean-Array, um zu gucken, bei welchem Filer ein "false" (für nicht durchsucht) steht. Wenn dem so ist, wird dieser Filer auf "true" gesetzt, und durchsucht. Somit soll dann das doppelte durchsuchen verhindert werden. Wenn ein Thread fertig ist, wird eine Variable für die Anzahl laufender Threads heruntergezählt. Derweilen guckt der Überwachungs-Thread permanent, wieviele Threads noch laufen (anhand der Zähler-Variable). Wenn der Wert bei 0 liegt, wird die "Loading" Message im GUI entfernt. Mit 4 Such-Threads + Überwachungs-Thread gab es bei mir die beste Geschwindigkeit (Core2Duo 2,8 GHz). public static void SearchOrderPaths(string Kdnr, int amountOfThreads) { int runningThreads = amountOfThreads; Thread searchPaths = new Thread(delegate() // Überwachtungs-Thread { SetWaitText("directory", true); // Event: Wartetext anzeigen DateTime start = DateTime.Now; // Zeitmessung starten string[] strFiler = Directory.GetDirectories(UncPathToShare); // Ermittlung der Filer in der Freigabe bool[] boolFilerChecked = new bool[strFiler.Length]; // boolean für jeden Filer, ob bereits überprüft for(int i = 0; i < amountOfThreads; i++) // parallele Suchthreads starten { Thread searchInstance = new Thread(delegate() { for (int filernr = 0; filernr < strFiler.Length; filernr++) { if (boolFilerChecked[filernr] == false) { try { boolFilerChecked[filernr] = true; foreach (string subdirectory in Directory.GetDirectories(strFiler[filernr] + @"\taschenbatcher\", "*", SearchOption.AllDirectories)) { logger.Info(Thread.CurrentThread.ManagedThreadId + " Filernr:" + filernr + " " + subdirectory); ; if (!applicationTerminated) // Prüfen ob Anwendung geschlossen { if(subdirectory.Contains(Kdnr)) AddPathItems(subdirectory); } else Thread.CurrentThread.Abort(); } } catch (DirectoryNotFoundException ex) { logger.Error(ex.Message); continue; }; } } runningThreads -= 1; // Wenn Thread beendet wird }); searchInstance.Start(); } while (applicationTerminated == false) // Prüfen ob Anwendung geschlossen { if (runningThreads == 0) // Prüft wieviele Threads laufen { DateTime end = DateTime.Now; TimeSpan neededtime = end - start; logger.Info(neededtime); // Benötigte Zeit in Logdatei schreiben SetWaitText("directory", false); break; } } }); searchPaths.Start(); // Starten des Threads } Jetzt ist meine Frage, ob man hier noch Optimierungen vornehmen kann, um die Suche zu beschleunigen. Derweil braucht man für das komplette durchsuchen minimum 1:20 min - was allerdings auch von den anderen Belastungen auf den Filern abhängt. Bin leider noch eher Anfänger, was programmieren & Multithreading angeht. Ich vermute auch, dass dieses eine ziemlich unsaubere Lösung ist - mir ist allerdings nicht's gescheiteres eingefallen. Auch google hat mir für meine Idee nicht's wirklich passendes angeboten. Wäre nett, wenn sich das vielleicht mal jemand anschauen könnte. Vielen Dank im Vorraus! MfG AnDi_P
  2. Okay, werde ich mir mal anschauen. Danke!
  3. Ah klasse, wohl nur falschen Suchbegriff verwendet...vielen Dank!
  4. Hallo zusammen, zum Programmieren benutze ich Visual Studio 2008 Express. Es hat sich mir nun bereits öfters die Frage gestellt, wie man nun am Besten verschiedene Versionen eines Projektes "managen" kann. Ich meine, theoretisch kann man ja den zu verändernden Quellcode erstmal kopieren und auskommentieren, aber bei einer Form, wo man z.B. größere Änderungen machen will, ist das natürlich eher unpraktisch. Gibt es da eine integrierte Funktion, womit man quasi das Projekt kopieren kann, um eine neue Version zu erstellen? Google hat leider nicht so wirklich was hergegeben, vielleicht auch nur falsch gesucht... Würde mich ansonsten mal interessieren, wie ihr sowas handhabt. Danke und Gruß, AnDi_P
  5. AnDi_P

    MySQL - VB.Net

    Hallo, korrekt, hatte das gleiche Problem - da hilft der MySQL-Connector ;-) Aber wo wir schon gerade bei dem Thema sind: Muss man zwangsläufig einen MySQL Server auf dem Rechner am Laufen haben, wo man die Anwendung später verwenden will, oder gibt es auch die Möglichkeit, einfach nur auf eine lokale MySQL-Datendatei zuzugreifen, und diese zu bearbeiten/abfragen? Ich meine, wenn das nur eine Anwendung für einen User sein soll, wäre es ja übertrieben, dafür gleich einen Server auf dem System zu installieren? Danke im Vorraus! Greetz AnDi_P
  6. Hallo, ich kann die Situation gut nachvollziehen. Habe auch eine Ausbildung zum IT-SE 2008 abgeschlossen (beim großen T). Habe zum Ende der Ausbildung hin vergeblich versucht, mich auf richtige IT-Stellen zu bewerben. Habe dann erstmal 6 Monate im technischen Service gearbeitet, und mich immer weiter beworben. Irgendwann habe ich dann eine Einladung zu einem Gespräch bekommen, wo als Erfahrungen Linux, Windows Server, Netzwerk & Co, gutes Englisch gefordert waren... Davon konnte ich praktisch eher kaum was vorweisen, sondern nur das in der Schule erlernte, was nicht sonderlich viel war. Habe allerdings erzählt, dass ich mir privat autodidaktisch und durch verschiedene Test-Stellungen zu Hause was beibringe, sowie dabei bin, mir Linux Kenntnisse anzueigenen - was soweit auch gestimmt hat. Naja, die Stelle habe ich glücklicherweise bekommen ;-) Zu mittlerweile folgenden Konditionen: - 30 Urlaubstage - Grundgehalt: ~ 31.000 € - mind. jeden 2. Monat Bereitschaftsdienst ~ 480€ extra Muss dazu sagen, es eine AG ist, und vermutlich auch deshalb so großzügig augelegt ist. Warum ich das ganze erzähle? Ich hätte mit meinen wenigen praktischen Erfahrungen was IT betrifft (Server & Co), zu anfangs auch nicht erwartet, dass ich eine Stelle bekomme. Wenn man sich allerdings einfach auf sehr viele Stellen bewirbt, kann da doch mal ein Glückstreffer bei sein kann. Man muss den Leuten einfach nur klarmachen, dass man lernfähig ist, und sich von Anfang an interessiert zeigen. Gruß AnDi_P
  7. Alles klar, vielen Dank für die Infos! Sollte sonst noch jemand irgendwelche Ideen haben, kann er sie gerne mitteilen MfG AnDi_P
  8. AnDi_P

    skript mit http request

    Hallo, stimmt, haste Recht, dass das da in der man-page steht Ich hab's gerade aber nochmal explizit nachgetestet, und benutze es bei vielen Scripten, und bei mir gibt "grep -q <Suchbegriff>" immer eine 0 wenn gefunden, und eine 1, wenn nicht. Vielleicht ein Fehler in der man-page? MfG
  9. AnDi_P

    skript mit http request

    Hallo, im Allgemeinen ist es so Linux festgelegt, dass ein Rückgabewert = 0 immer erfolgreich bedeutet. Alles != 0 deuted auf einen Fehler hin. Wieso, weshalb, warum? Weiß ich nicht - vielleicht sieht's schöner aus Hier noch mal was zum Lesen dazu: http://openbook.galileocomputing.de/linux/linux_07_shellskript_programmierung_009.htm#mjf5c6e0943531b66a4e40be08312c572c MfG Andi_P
  10. Hallo, erstmal vielen Dank für Deine Hilfe. Konnte es leider erst jetzt testen Also der erste Lösungsvorschlag hat leider nicht gefruchtet, da du bei diesem nicht die einzelnen Dateigrößen ausgelesen hast, was ja bei mir der Flaschenhals war, sondern wie es für mich aussieht, die Größe aller Dateien des FileInfo-Arrays. Nur das Anzeigen von so vielen Dateien, also der reinen Strings, ging bei mir auch recht schnell. Zum zweiten Vorschlag: Dieser scheint eher zu passen. Die Anwendung bleibt interaktiv, was sowieso schon so mein Problem war, nur die Geschwindigkeit des Größe-Auslesens der Dateien, wird ja nicht besser. Allerdings wird das natürlich schön durch das stückchenweise hinzufügen besser "vertuscht" ;-) Allerdings liegt hier mein Problem noch in dem genauen Verständnis der Delegates/Invokes - hier fehlen mir halt noch die Basics, welche ich mir dann wohl noch selbst anlesen werden muss. Aber mal allgemein gefragt: Wieso geht das denn im normalen Windows Explorer so fix? Da merkt man ja fast keine Verzögerung? MfG AnDi_P
  11. AnDi_P

    skript mit http request

    Habe es gerade mal mit einem anderen Beispiel getestet, scheint wohl so nicht zu funktionieren. Ich mache es meistens so: curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR" if [ ${?} -eq 0 ] then .... fi Also im Prinzip das Gleiche wie vorher... MfG AnDi_P
  12. AnDi_P

    skript mit http request

    Hallo, Ich würde es mal so probieren: if [ `curl -S --connect-timeout 4 -d $dateiname "http://XXX.XXX.XXX.XXX:XXXX/XX/XXX.aspx" | grep -q "ERROR"` = 0 ] Hinzugekommen sind die Backticks "`" vor und nach dem Kommando, sowie der Parameter "-q" bei dem grep. Dadurch liefert das grep einen Rückgabewert, je nach dem ob der Suchbegriff gefunden wurde, oder nicht. Also quasi das, was du mit dem "true" abbilden wolltest. LG
  13. Hallo, bzgl. des Drag & Drops: Ich war auch bereits auf der Suche nach einer Möglichkeit, Dateien aus einer Windows Forms-Anwendung (DataGridView) in den Windows Explorer (dynamisch) zu droppen. Scheinbar ist dies so nicht mit C# bzw. .NET möglich, wie ich in einigen google-Ergebnissen gelesen habe. Soll wohl nur andersherum funktionieren: Explorer -> Windows Form. Wenn jemand anderer Meinung ist, und auch Lösungen hat, würde ich die natürlich auch gerne erfahren MfG Andi_P
  14. Guten Morgen, so, ich habe mir mal die DirectoryInfo.GetFileSystemInfos-Methode angeschaut, aber leider keine Möglichkeit gefunden, dadrauf direkt per FileInfo zuzugreifen. Ich vermute mal eher, dass Du die DirectoryInfo.GetFiles-Methode meintest? Mit dieser errreiche ich allerdings auch keine Performance-Verbesserung. Hier mal ein kleiner Code-Ausschnitt: DirectoryInfo dirInfo = new DirectoryInfo(listPath.Text); FileInfo[] dirFiles = dirInfo.GetFiles(); lblNumberOfFiles.Text = dirFiles.Length.ToString(); for (int i = 0; i < dirFiles.Length; i++) { dataGridFiles.Rows.Add(dirFiles[i].Name, dirFiles[i].Length); } Mache ich da vielleicht einen generellen Denk-Fehler, oder sieht das soweit in Ordnung aus?
  15. Hallo, erstmal Danke für Eure Antworten. Das Auslesen der Ordner-Inhalte habe ich bereits in einem eigenen Thread laufen. Die DirectoryInfo.GetFileSystemInfos-Methode werde ich mir mal anschauen, kann ich aber leider erst Montag wieder bei der Arbeit testen, in wie weit das Verbesserung bringt. Mit dem P/Invoke kenne ich mich leider noch nicht aus, bin noch Programmier-Anfänger. Werde mir bei Bedarf sonst mal was dazu "ergooglen" Melde mich dann nochmal. MfG AnDi_P
  16. Hallo zusammen, ich habe eine kleines Problem bei einer Windows Forms Anwendung. Ich lasse dort bei einem MouseDoubleClick-Event den Inhalt einer Netzwerkfreigabe in einem DataGridView anzeigen. Wenn ich nur den Inhalt aufliste, dauert es bei ca. 4000 Dateien ~1 sec. Nun möchte ich aber zusätzlich, in einer extra Spalte, auch noch die Dateigröße mit anzeigen lassen. Bisher habe ich es so, dass bei jedem Zufügen einer Zeile zu dem DataGridView (for-Schleife), ein FileInfo-Objekt erzeugt wird, und mit der Eigenschaft "length" die Größe ausgelesen wird. Mit dieser Methode dauert das Anzeigen des selben Verzeichnisses allerdings ~15-18 sec., was ich als zu lang empfinde Ich denke mal, dass das damit zusammenhängt, das für jede Datei im Verzeichnis, ein extra Speicherbereich angelegt wird, oder..? Gibt es eine andere performantere Möglichkeit, die Dateigröße auszulesen? Bei Windows geht dies ja auch wesentlich schneller. Habe bisher bei google leider nichts brauchbares gefunden. Da durch die Beschreibung denke ich mal das grundlegende Problem schon beschrieben ist, poste ich erstmal nicht den Quelltext. Vielen Dank im Vorraus. MfG AnDi_P
  17. Ah super, hat so geklappt! Man lernt dazu...vielen Dank!
  18. Hallo, danke für Deine Antwort. Bin leider noch nicht so wirklich erfahren mit Windows-Forms-Anwendungen. Also den Event-Handler selber habe ich ja in Form1.cs angelegt: private void dataGridFiles_MouseDoubleClick( object sender, EventArgs e) { // Anweisungen } In der Form1.Designer.cs habe ich folgendes eingetragen: this.dataGridFiles.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(dataGridFiles_MouseDoubleClick); Hatte das so in einem Beispiel im MSDN glaube ich gelesen. D.h. ich müsste das registrieren des Event-Handlers für das DataGridView auch in der Form1.cs direkt bzw. einer neuen Partical Class machen...?
  19. Hallo zusammen, habe da mal ein kleines nerviges Problem bei Visual Studio 2008 Express (C#). Habe eine Windows-Forms-Anwendung erstellt, mit mehreren Button's & Co, sowie einer ListBox und einem DataGridView. Für die ListBox, sowie das DataGridView, habe ich Eventhandler (MouseDoubleClick) erstellt. Das Problem ist, dass immer wenn ich auf der Form irgendetwas verändere, die Einträge für die MouseDoubleClick-Eventhandler in der Form.Designer.cs verschwinden. Ist das so gewollt von MS, oder irgendeine Option die man aktivieren/deaktivieren kann? Ist nämlich nervig die immer wieder nach jeder kleinen Änderung anzulegen. Wäre schön, wenn mir jemand helfen könnte. Danke im Vorraus! LG AnDi_P
  20. Hallo zusammen, ich hätte da mal ein paar Fragen. Also wir haben in der Firma so gut wie alle Filer, jeweils immer Master-System mit angehängtem Storage-System, auf OpenSuse bzw. Suse Linux Enterprise SP2 laufen. Einige der "schwächeren" Systeme (z.B. 2x 3GHz P4) sind Perfomancemäßig (NFS) ziemlich im Keller, was vermutlich an der sehr hohen Anzahl der gleichzeitig darauf zugreifenden/schreibenden Clients liegt. Bei neueren Systemen z.B. die neuen Dell R410 treten eigentlich fast keine Probleme auf. Jetzt bin ich mal durch Zufall auf FreeBSD gestoßen, und da stach mir die Aussage "stark im Netzwerkbereich" in's Auge. Da ich natürlich gerne offen für neues bin, habe ich da ein paar Fragen: - Wie würde es performancemäßig zwischen FreeBSD-Server & Linux Clients aussehen? Könnte es dort Geschwindigkeitsvorteile geben? - Sind dort Kompatiblitätsprobleme bekannt? Habe etwas von Problemen mit NFSv3 gelesen...? - Wie sieht es mit Hardwarekompatiblität im Server-Bereich aus? Einbußen gegenüber Linux? Ich habe zwar schon gegoogled, und das ein oder andere über FreeBSD in Erfahrung bringen können, aber leider noch nicht so wirklich Praxs-Info's über Kompatiblität zwischen BSD & Linux etc. finden können. Hier gibt es sicher einige Experten die mir vielleicht aus der Praxis berichten können. Vielen Dank im Vorraus! Lg AnDi_P
  21. AnDi_P

    Frage zum Befehl "sed"

    Hallo, vielen Dank für den Tipp, hat funktioniert! Kannst du mir evtl. noch erklären, wie die Shell diesen Ausdruck interpretiert? subkeyaccid=\"[^\"]*\" Also wonach sed dann genau "suchen" soll? Bin leider noch nicht so ganz fit mit regulären Ausdrücken..., Lg
  22. AnDi_P

    Frage zum Befehl "sed"

    Hallo, danke für Deine Antwort. Es handelt sich um SuSe 10.3. Mir fällt gerade ein, dass es, soweit ich es richtig in Erinnerung habe, mit festen Werten (also keine Variablen, oder Jokerzeichen) geklappt hat. Also quasi auch so wie in deinem Beispiel. Muss man vllt. bei der Benutzung von Variablen oder Jokerzeichen irgendwas besonderes bei sed beachten? Vielleicht weiß ja noch jemand irgendwas..
  23. Hallo zusammen, mir macht der Linux Befehl "sed" ein kleines Problem. Undzwar benutze ich ihn in einem Shell-Script, um einen bestimmten String in einer XML-Datei zu suchen, und zu ersetzen. Das Suchen und ersetzen klappt soweit auch, allerdings wird alles was in der entsprechenden Zeile hinter dem zu ersetzenden String steht, weggeschnitten. Gibt es dort eine Option um dies zu verhindern...? Mein Befehl sieht (laut Gedächtnis) so aus: sed s/subkeyaccid=\".*\"/subkeyaccid=\"${VARIABLE}\"/ < ${QUELLDATEI} > ${TEMP-Datei} Habe es aus auch mit cat und einer Pipe zu sed versucht: cat ${QUELLDATEI} | sed s/subkeyaccid=\".*\"/subkeyaccid=\"${VARIABLE}\"/ >> ${TEMP-Datei} Allerdings auch hier das gleiche Problem. Habe ich irgendetwas übersehen, bzw. nicht bedacht...? Thanks for help! LG AnDi_P
  24. AnDi_P

    cronjob anlegen

    Ah, okay. Gute Frage - ich benutze selber nur SuSe..
  25. AnDi_P

    cronjob anlegen

    Du hättest ein bisschen weiter unten im Manual schauen müssen ;-) ACTIONS -delete Delete files; true if removal succeeded. If the removal failed, an error message is issued. Use of this action automatically turns on the '-depth' option.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...