Laden...
K
Kaji myCSharp.de - Member
Fachinformatiker Anwendungsentwicklung Clausthal-Zellerfeld Dabei seit 10.12.2007 593 Beiträge
Benutzerbeschreibung

Forenbeiträge von Kaji Ingesamt 593 Beiträge

11.11.2008 - 12:54 Uhr

Hallo Golo Rodon,

ich hatte den Post total übersehen gehabt, daher hatte ich nicht drauf geachtet. Also nen Subversionclient sollte auf einem Windows 2008 Server ohne Probleme funktionierten. Zu dem Hyper-V, da ich auch mit dem arbeite, gibt es möglichkeiten per Power-Shell oder auch mit C# auf den Hyper-V Server zuzugreifen und auch einzelne VM`s herunterzufahren und ähnliches. Z.b. hier und auch andere Quellen erläutern wie das funktioniert. Um von einem anderen Rechner darauf zuzugreifen brauch man Administrationsrechte auf dem Zielcomputer logisch ne?^^ Na gut wenn du noch Fragen hast, Frag! 🙂

Gruß Daniel

11.11.2008 - 12:54 Uhr

Hallo Jimpanse,

das wovon du sprichst nennt sich Mono. Einfach googlen da findest du zich sachen zu Mono und .Net 🙂

Gruß Daniel

11.11.2008 - 12:37 Uhr

Hallo,

also du kannst in einer WPF anwendung ein Fenster für XNA erstellen. Ein Artikel darüber findest du hier. Damit kannst du alles mögliche ausserhalb des XNA fensters mit WPF machen und der eine Bereicht wird mit XNA gerendet. Dies wird durch das neue .Net Framework 3.5 SP1 ermöglicht weil dort in WPF eine neue Direct3D Image Klasse hinzugefügt wurde die als renderdevice fungiert.

Mit freundlichen Grüßen Daniel

03.11.2008 - 15:49 Uhr

Hallo,

also bei ASP.Net ist es wie mit PHP das gleiche 🙂 Der Benutzer macht eine Anfrage an den Server der Server verarbeitet die ASP.Net-Seite und schickt dem Benutzer HTML bzw. Javascript zurück. Prinzipiell kann man den ASP.Net Quellcode damit nicht klauen wenn nur Anfragen über den IIS erlaubt werden. Ob man trotzdem mit Tricks drankommt weiß ich nicht, aber leicht kann ich mir das nicht leicht vorstellen, weil der Benutzer normal nichts von dem ASP.Net sieht.

Gruß Daniel

29.10.2008 - 16:01 Uhr

Hallo,

MrSparkle: das ist schon korrekt nur der Header muss neu geschrieben und von den anderen Videos muss der Header entfernt werden. Obwohl ich gehört habe das gewisse Codecs sich nicht so einfach verarbeiten lassen aber naja.

ProGamer: Du musst das über Decoding die Frames rausziehen und in eine große Datei zuammenpacken und kannst dabei auch das neu berechnen außen vorlassen wenn alles im selben Format ist.

Gruß Daniel

24.10.2008 - 12:21 Uhr

Hallo,

wenn du alles als Date vorliegen hast kannst du einfach addieren und Subtrahieren.

Gruß Daniel

22.10.2008 - 13:07 Uhr

Hallo,

es kommt natürlich darauf an was wer machen möchte. Als die schlagwörter HD und Full-HD vielen sieht das ganze ein wenig anderst aus. Es klingt so als würde er selber einen Codec implementieren und um damit natürlich das maximum an perfomance rauszuholen ist das schnellste der framebuffer. Full-HD ist leider keine leichte Sache.

Gruß Daniel

21.10.2008 - 17:43 Uhr

Hallo tscherno,

von einem Drittanbieter ist ja lustig^^ Der wird ja hinter seinem Webservice auch nix anderes machen als mit einem Webrequest die Sachen auszulesen.. Also Sachen gibt es ..^^

Gruß Daniel

21.10.2008 - 17:17 Uhr

Hallo,

die meisten Programme machen einen Webrequest auf die Webseite wobei sie den Namen des Films übergeben und anschließend eine Webseite mit den Informationen zurückkriegen die häufig mit Regex gefiltert und dann entsprechend eingetragen werden. In seltenen fällen oder vielleicht auch in gar keinem Fall wird ein Webservice angeboten den man direkt ansprechen kann.

Gruß Daniel

21.10.2008 - 14:45 Uhr

Hallo,

schön das du den codec kennst..^^ Der Codec ist das aussengerüst das das Video sozusagen umschließt. Deswegen kannst du keine Videos einfach bitweise aneinander pappen weil jedes einzelne Video im Codec für sich gekapselt ist. Du musst aus jeder Datei die Video-Dateien extrahieren und in einem Codec zusammenschließen.

Gruß Daniel

02.10.2008 - 09:23 Uhr

Hallo,

nur zum verständniss, du redest davon eine Virualisiertes OS während der laufzeit zu backupen oder?

Gruß Daniel

EDIT: Also auf der Microsoft Seite findet man folgendende Aussage:

Clustering of Windows Server virtualization (WSv) hosts or VMs running on WSv hosts and backup of VMs while they are running keep your virtualized servers highly available.

Wenn es das ist was du suchst. Hab nicht konkret verstanden was du machen willst 🙂

Gruß Daniel

01.10.2008 - 11:59 Uhr

Hallo,

hab ich auch Opera 9.6 Win XP Pro.

Gruß Daniel

29.09.2008 - 15:39 Uhr

Hallo,

ich weiß jetzt nicht ob du mit WinForms oder anderen Sachen arbeitest aber normal gibts eine Eigenschaft .Focus die angebit ob das Control Form oder sonst was den Focus hat.

Gruß Daniel

29.09.2008 - 12:56 Uhr

Hallo BerndFfm,

ich weiß nicht ob du mein Beitrag überflogen hast aber wenn es so ist wie ich sage wäre es vollkommen richtig von dem Microsoft SQL Server. Man kann bei der Installation explizit angeben ob er in eine Domäne soll oder nicht. Wenn er in eine Domäne installiert wird darf er "gar nicht" nur SQL authentifizierung haben. Den die Domäne steht über allem und das soll ja auch so sein.

Gruß Daniel

29.09.2008 - 12:37 Uhr

Hallo,

ich meine mich zu Erinnern wenn du den SQL Server bei der installation in eine Domäne hinzufügst es keine SQL only Authentifizierung gibt. Ist ja auch logisch den es soll ja alles von der Domäne erreichbar und gesteuert werden.

Gruß Daniel

24.09.2008 - 16:54 Uhr

Hallo 🙂

Ich habe Controls die mit der Maus verschoben werden. Klappt alles wunderbar. Diese Controls sollen aber nur über einem bestimmten anderen Control sichtbar sein. Bei den anderen Anliegenden Controls sollen die verschiebbaren Boxen "darunter" verschwinden. Also irgendwie die Möglichkeit das ich über nen Z-Index bestimmen kann was über was liegt. Gibts da eine Möglichkeit? Die Controls lassen sie nämlich über alle anderen darüber ziehen und verschwinden nciht darunter 🙁

Gruß Daniel

19.09.2008 - 09:58 Uhr

Willkommen in der Community,

Ja es ist möglich und dafür gibt es verschiedenste Möglichkeit die natürlich in der schwierigkeit differieren.

  1. Du hast eine Webseite die in eine Datei Befehle schreibt die das Programm über einen Timer ausliest. Ist wohl die einfachste aber wohl bei weitem nicht die beste Lösung

  2. Du hast eine Webseite einen Webservice und ein Programm. Die Webseite steuert den Webservice der wiederrum den Befehl an das Programm weitergibt. (Dafür muss dein Programm ein Webservice Client integrieren).

  3. Die 3te Möglichkeit weiß ich nicht direkt aber ich glaube ich hab schonmal gehört das man mit ASPX Befehle an das System weitergeben kann. Somit das dein Programm sie auch abfangen kann aber bei der Variante bin ich mir nicht sicher.

Gruß Daniel

18.09.2008 - 11:18 Uhr

Hallo,

Zoooong das hab ich natürlich total übersehen ^^ Ja einfach nen Typecast auf den int und schon hast du dein Byte.. Aber du solltest vorher ein TryParse machen oder so weil Byte ja nur bis 255 kann. Nur als vorsicht 🙂

Gruß Daniel

18.09.2008 - 11:13 Uhr

Hallo,

du kannst einen String wie 6F nicht einfach in Byte umwandeln 😉 Daher wird er dort meckern. Er geht normal von einem Decimal system aus also von 0-9 nich von 0-F. Deswegen musst du von String zu Byte auch Convertieren 😉

Gruß Daniel

18.09.2008 - 11:00 Uhr

Hallo,

also über Koordinaten wirst du das schwierig oder fast unmöglich realisieren können. Webseiten haben keine Controls an bestimmten punkten je nach Webbrowser oder auf welche Größe die Webbrowser sind ist das Control auf einer anderen position. Du solltest den Quelltext parsen und dann darüber ein Button klicken oder ein Bild auslesen. Solche ansätze gibt es häufiger hier im Forum.

Gruß Daniel

18.09.2008 - 09:53 Uhr

Hallo zommi,

also mein Messergebnis kommt auf 99Millionen Pixel 😉 Ich hab das gefühl das es bei dir damit auch an die magische Grenze von 250Millionen Pixel kommen sollte. Wo deine C++ Applikation ohne SSE geschlagen wäre. Ein kleiner Fehler ist drin und zwar hast du vergessen den Pointer vom Bild zu holen.


                byte* imgStartPtr = (byte*)WorkPicture.pointer.ToPointer();

Die Zeile muss da wieder rein 😉 Mein Xeon ist nen HyperThreading also nicht wirklich DualCore. Aber der Rechner auf dem es am Ende eingesetzt wird ist wahrscheinlich ein QuadCore. Nur weiß ich nicht ob 1Kern übrig bleibt 😉

P.S: In der Tat ist das eine schwierige Sache. Und bei normalen Zugriffen ist eine gemanaged Klasse auch wunderbar handlebar. Nur wenn es gerade um Filter und solchen Matrix Algorythmen geht schauts dann für viele Schwarz aus mit der Performance weil das oft nur eine vorverarbeitung ist die dann mehr CPU frisst als der eigentliche Hauptteil. Deswegen wäre eine C# nutzbare Klasse für solche verarbeitungs Algorythmen interressant hmm. Was denkst du?

18.09.2008 - 09:07 Uhr

Hallo zommi,

jetzt sieht das Ergebnis auch so aus wie es soll 🙂 So eine Art Grauschleier. Also bei mir erreicht das ganze 92Million Pixel was aber wohl eher an der CPU & Ram liegt. Wenn es bei dir 230Millionen Pixel erreicht ist es ja nur 20Millionen Pixel langsamer als deine native C++ Version was ich dann gar nicht soviel finde. Und möglicherweise kommt man da auch noch hin. Interressant wäre ja ob wieviele eine Bildklasse den anderen hier im Forum rumschwierenden Bildklassen im vorsprung wäre wenn sie auf Pointer ebene arbeiten würde. Mal schaun ob ich mal in meiner Freizeit Zeit für einen Versuch kriege 🙂 Schonmal besten Dank für deine Hilfe ist ein echt Interressantes Thema.

Gruß Daniel

17.09.2008 - 16:04 Uhr

Hallo zommi,

in der Tat hab ich nicht viel mit C/C++ zu tun. Zudem fehlt mir ein Mathematische Kenntnis um das mit der Matrix so einfach umzusetzen aber ich denke dein Ergebnis ist da richtig was da raus kommt 🙂 Vielen Dank es ist echt der Hammer das man auf 90Millionen Pixel pro Sekunde dabei rauskommt. Das ist bei einem 300x300 Pixel Bild 110 Bilder pro Sekunde die man mit Sobel durchjagt. Das ist cool🙂 Natürlich nicht zu vergleichen mit deinen 250Millionen Pixel 😉 Aber das zeigt mir schon deutlich wie viel optimierungsmöglichkeiten einem zur verfügung steht. Ich denke das hilft mir in Zukunft viel weiter.

Gruß Daniel

P.S: Wäre auf so einer Basis eine Klasse zum bearbeiten von Bildern nicht deutlich performanter als die anderen beiden Klassen die oben genannt wurden?

17.09.2008 - 15:28 Uhr

Hallo zommi,

das ist ja erstaunlich oO Also die letztere von beiden ist ein bisschen schneller als die andere. Die schnellere Version schafft es auf 51Millionen Pixel. Wow das ist echt nicht schlecht. Ich blicke aber noch nicht ganz wie deine Funktion funktioniert. Du benutzt nen Pointer wie nen Array?^^; Hmm mal gucken ob ich das auch verstehe mal 🙂 Auf jedenfall ist das jetzt schon ziemlich cool.

Gruß Daniel

Edit: Das sind übrigens bis jetzt alles Werte mit Debugger ohne Debugger komme ich bei dem Code auf knapp 90Millionen Pixel

17.09.2008 - 13:23 Uhr

Hallo,

ich hab das ganze nochmal überarbeitet das es jetzt auch besser zu lesen sein. Auch die innere Schleife erhöht gleich sinnvoll den Pointer. Zudem war der Zugriff auf den Pitch per Klasse recht langsam was die einbuße hervorgerufen hat. Ich komme jetzt auf 22Millionen Pixel


        private mvIMPACT_NET.Image SobelHorizontal(mvIMPACT_NET.Image WorkPicture)
        {
            short[,] gx = new short[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; 

            WorkPicture.prepareReadWriteAccess();
            unsafe
            {
                int ImgPitch = WorkPicture.pitch;
                byte* imgStartPtr = (byte*)WorkPicture.pointer.ToPointer();
                byte* imgEndPtr = imgStartPtr + WorkPicture.height * ImgPitch;
                for (byte* lineStartPtr = imgStartPtr; lineStartPtr < imgEndPtr ; lineStartPtr += ImgPitch)
                {
                    byte* lineEndPtr = lineStartPtr + ImgPitch;
                    for (byte* pixelPtr = lineStartPtr; pixelPtr < lineEndPtr; pixelPtr++)
                    {
                        byte new_x =0;
                        byte* matrixWidthEnd = pixelPtr + 3;
                        byte matrixWidthCount = 0;
                        for (byte* matrixWidthPixelPtr = pixelPtr; matrixWidthPixelPtr < matrixWidthEnd; matrixWidthPixelPtr++)
                        {
                            byte* matrixHeightEnd = matrixWidthPixelPtr + ImgPitch *3;
                            byte matrixHeightCount = 0;
                            for (byte* matrixHeightPixelPtr = matrixWidthPixelPtr; matrixHeightPixelPtr < matrixHeightEnd; matrixHeightPixelPtr += ImgPitch)
                            {
                                new_x = (byte)(gx[matrixWidthCount, matrixHeightCount] * *matrixHeightPixelPtr);
                                matrixHeightCount++;
                            }
                            matrixWidthCount++;
                        }
                        *pixelPtr = new_x;
                    }
                }
            }
            WorkPicture.releaseAccess();

            return WorkPicture;
        }

22Millionen sind schon nicht ganz schlecht. Falls du noch Ideen hast zommi kannst du ja einfach mal posten. Mir fällt jetzt so direkt nichts zum Optimieren nicht mehr ein.

Gruß Daniel

17.09.2008 - 12:34 Uhr

Hallo,

da bin ich wieder 🙂 Also ich hab mal deine Ratschläge befolgt und hab schon ein recht nettes Ergebnis gezielt. Erstmal der Quellcode:


        private mvIMPACT_NET.Image SobelHorizontal(mvIMPACT_NET.Image WorkPicture)
        {
            int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; 

            WorkPicture.prepareReadWriteAccess();
            unsafe
            {
                byte* imgStartPtr = (byte*)WorkPicture.pointer.ToPointer();
                byte* imgEndPtr = imgStartPtr + WorkPicture.height * WorkPicture.pitch;
                for (byte* lineStartPtr = imgStartPtr; lineStartPtr < imgEndPtr ; lineStartPtr += WorkPicture.pitch)
                {
                    byte* lineEndPtr = lineStartPtr + WorkPicture.pitch;
                    for (byte* pixelPtr = lineStartPtr; pixelPtr < lineEndPtr; pixelPtr++)
                    {
                        float new_x = 255;
                        for (int matrixWidth = 0; matrixWidth < 3; matrixWidth++)
                        {
                            for (int matrixHeight = 0; matrixHeight < 3; matrixHeight++)
                            {
                                new_x = gx[matrixWidth, matrixHeight] * *(pixelPtr + matrixWidth + (matrixHeight*3));
                            }
                        }
                        *pixelPtr = (byte)new_x;
                    }
                }
            }
            WorkPicture.releaseAccess();

            return WorkPicture;
        }

Mit diesen Quellcode komme ich immerhin schonmal auf 17Millionen und ein paar Zerquetschte Pixel pro Sekunde. Das ist ja schonmal deutlich besser ist 🙂 Was mich aber ein wenig ärgert ist das ich bei der innersten Schleife nicht soetwas wie:


                            for (int matrixHeight = 0; matrixHeight < matrixMaxHeight; matrixHeight += WorkPicture.pitch)
                            {
                                new_x = gx[matrixWidth, matrixHeight] * *(pixelPtr + matrixWidth + matrixHeight);
                            }

machen kann. Wenn ich die innerste Schleife so baue was ja eigentlich performanter sein sollte wird er richtig langsam da schafft er dann nichtmal 1Million pro Sekunde. Also die Schleife ist dann das langsame 🙂 das innere kann ich auskommentieren das liegt nur an der Schleife.

Gruß Daniel

16.09.2008 - 18:02 Uhr

Hallo,

  1. Ja das ist ne sehr gute Frage was ich da wieder gemacht habe oO Naja sieht schön aus schwarz weiß ich habs schonmal fix geändert:

        private mvIMPACT_NET.Image SobelHorizontal(mvIMPACT_NET.Image WorkPicture)
        {
            Size WorkPictureSize = new Size(WorkPicture.width, WorkPicture.height);
            int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; 

            WorkPicture.prepareReadWriteAccess();
            unsafe
            {
                byte* WorkPicturePointer = (byte*)WorkPicture.pointer.ToPointer();
                byte* CurrentPointer;
                for (int x = 1; x < WorkPictureSize.width -1 ; x++)
                {
                    for (int y = 1; y < WorkPictureSize.height - 1; y++)
                    {
                        float new_x = 0;
                        for (int hw = -1; hw < 2; hw++)
                        {
                            for (int wi = -1; wi < 2; wi++)
                            {
                                CurrentPointer = WorkPicturePointer;
                                byte CurrentPixel = *(CurrentPointer + ( (x+wi) + ((y+hw)*WorkPictureSize.width) ) );

                                new_x = gx[hw + 1, wi + 1] * CurrentPixel;
                            }
                        }
                        CurrentPointer = WorkPicturePointer + ((x - 1) + ((y - 1) * WorkPictureSize.width));
                        *CurrentPointer = (byte)new_x;
                    }
                }
            }
            WorkPicture.releaseAccess();

            return WorkPicture;
        }

  1. Ja ich guck mir das morgen genau an wie ich die Schleifen günstiger legen kann auch mit Punkt 4 natürlich in Kombination Ergebnisse Poste ich morgen dazu 🙂

  2. In meinem Fall ist Width=Stride jedes Pixel ist 1Byte also 8bit ohne Overhead. Daher sollte es kein unterschied sein oder?

  3. Das mit separieren muss ich mir ja nochmal genauer angucken. Damit könnte ich dann ja wahrscheinlich 2 Threads erstellen wo einer die Eine Berechnung und der andere die andere vornimmt.

Vielen Dank schonmal für die Anregungen ich komme morgen mit Ergebnissen 🙂

Gruß Daniel

Edit: SSE lässt sich soweit ich weiß nicht unter C# benutzen oder ? Wahrscheinlich als einzigste möglichkeit über Interop oder?

16.09.2008 - 16:20 Uhr

Hallo,

wenn es nur darum geht ob der String eine Zahl ist und kein nur Zahlen sind kannst du es z.b. mit Int.TryParse probieren. Das prüft ob es Zahlen sind. Sobald ein Buchstabe oder etwas anderes dabei ist gibt er ein False 🙂

Gruß Daniel

16.09.2008 - 16:02 Uhr

Hallo,

die IF-Bedinung habe ich drinne um zu Schaun wenn bei dem Sobel > 128 wird das Pixel weiß ist der Wert unter 128 wird der schwarz. Hier mal meine Implementierung:


        private mvIMPACT_NET.Image SobelVertical(mvIMPACT_NET.Image WorkPicture)
        {
            Size WorkPictureSize = new Size(WorkPicture.width, WorkPicture.height);
            int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; 

            WorkPicture.prepareReadWriteAccess();
            unsafe
            {
                byte* WorkPicturePointer = (byte*)WorkPicture.pointer.ToPointer();
                byte* CurrentPointer;
                for (int x = 1; x < WorkPictureSize.width -1 ; x++)
                {
                    for (int y = 1; y < WorkPictureSize.height - 1; y++)
                    {
                        float new_x = 0;
                        for (int hw = -1; hw < 2; hw++)
                        {
                            for (int wi = -1; wi < 2; wi++)
                            {
                                CurrentPointer = WorkPicturePointer;
                                byte CurrentPixel = *(CurrentPointer + ( (x+wi) + ((y+hw)*WorkPictureSize.width) ) );

                                new_x = gx[hw + 1, wi + 1] * CurrentPixel;
                            }
                        }
                        if (new_x > 128)
                        {
                            CurrentPointer = WorkPicturePointer + ((x - 1) + ((y - 1) * WorkPictureSize.width));
                            *CurrentPointer = 0;
                        }
                        else
                        {
                            CurrentPointer = WorkPicturePointer + ((x - 1) + ((y - 1) * WorkPictureSize.width));
                            *CurrentPointer = 255;
                        }
                    }
                }
            }
            WorkPicture.releaseAccess();

            return WorkPicture;
        }

Ja ich benutze den Sobel nur in eine Richtung hier X. Was du mit Filterkernen meinst was ich jetzt auf die schnell nicht.

Gruß Daniel

16.09.2008 - 15:42 Uhr

Hallo zommi,

das klingt ja schonmal ziemlich Interressant. Mit Lese schreibe Operationen meine ich Byte auslesen Byte schreiben. Bei dem Sobel ist auch noch 1 If bedinung drinne. Aber ansonsten ist ja ein Sobel nicht viel deswegen habe ich den rest vernachlässigt. Ich arbeite momentan mit 300x300 Pixel Bilder die als Graubild vorliegen sprich auch Einkanalig. Ich finde es aber sehr erstaunlich das du soviele Operationen mehr hinbekommst oO Arbeitest du SSE Optimiert?

Gruß Daniel

16.09.2008 - 15:07 Uhr

Hallo 🙂

Also das Bild liegt in einem eigenen Format vor. Dieses Format wird von der Libary zum Ansprechen der Kamera bereitgestellt. dieses Format beitet Funktionen wie Set/Get-Pixel und Set/Get-Value wobei Value deutlich schneller ist. Diese Funktionen sind aber noch immer zu langsam. Das Format bietet daher auch die Möglichkeit ein Pointer zu den Bilddaten zu geben. Den Pointer kann ich auf byte* casten und kann so darauf schreiben und lesen. Hochzählen wo ich bin muss ich natürlich selber X und Y Koordinaten sind da nicht mehr 🙂 Das ganze passiert leider unsafe weil man sonst damit nicht arbeiten kann 🙁 Wie du in deinem ersten Link siehst hab ich dadrin auch schon eine kleine Erweiterung gepostet gehabt hab ich also mit gearbeitet 🙂 Beim 2ten Link habe ich das auch interressiert verfolgt. Ich glaube aber nicht das diese Klassen schneller arbeiten als direkt auf einem byte Pointer oder? also ich finde 5 Millionen Lese/Schreib-Operationen ziemlich fix 🙂 Soviele Pixel sind das nämlich die pro Sekunde gelesen oder geschrieben werden.

Gruß Daniel

EDIT: Ich sehe gerade das der Beitrag verschoben wurde. Es sollte keine konkrete Problemstellung sein sondern Persönliche Erfahrungsberichte oder Diskussion zur Bild Pixel ver/bearbeitung. Ich hab ja kein konkretes Problem ich bin recht zufrieden mit meinem Ergebniss ich wollte nur andere Erfahrungen zu ähnlichen Sachen hören und was deren Ergebniss war 🙂

16.09.2008 - 13:56 Uhr

Hallo Community,

ich arbeite im Moment sehr intensiv mit Bildern, genauer gesagt Bilder Live von einer Kamera aufnehmen und bearbeiten und das möglichst Performant. Ich habe jetzt mal getestet wie schnell ich die Lese und Schreib Operatoren kriege. Dazu habe ich mir den Sobel Algorythmus genommen nachimplementiert, über Pointer auf das Bild, und je nachdem wieviele Bilder pro Sekunde ich schaffe ausgerechnet wieviele Schreib und Lese Operationen ich schaffe. Ich kam auf 5.000.000 Lese und Schreib Operationen pro Sekunde wobei die Lese Operationen deutliche überwiegen. Mein Entwicklungs PC ist ein Xeon 2,8Ghz Hyperthreading mit 1GB ECC DDR2 Speicher. Mich würde mal interressieren was ihr für Erfahrungswerte habt mit Performanten Lese/Schreib-Operatoren. Habt ihr auch solche Sachen getestet? Was kam bei euch dabei raus? Tricks und kniffe um schneller als mit einem Pointer zu sein ? 😜

Gruß Daniel

15.09.2008 - 09:16 Uhr

Hallo,

ich hinterlasse dir noch einen konkreten Link . Ich hoffe das hilft dir weiter 😉

Gruß Daniel

09.09.2008 - 12:42 Uhr

Hallo,

du musst eine Datenbank abfrage machen um zu prüfen ob es die Tabelle,Spalte gibt oder nicht 🙂 Woher soll den das Programm vorher wissen das es die Tabelle "hallejulia" gibt? z.b.? xD

Gruß Daniel

09.09.2008 - 12:39 Uhr

Hallo,

es ist eigentlich ganz einfach 🙂 Wenn du in C# von einem Interface "erbst" dann ist das eine implement. Wenn du in C# von einer Klasse erbst ist das ein extend 🙂

Gruß Daniel

08.09.2008 - 16:07 Uhr

Hallo,

dafür kann das V-Server angebot für Host-Europe nix das der Exchange 2007 mehr Arbeitsspeicher brauch 😉 Host-Europe hat nen guten Support und Preis/leistung find ich bei den V-Servern Top ich hab auch einen.

Gruß Daniel

05.09.2008 - 16:26 Uhr

Hallo Nerverhouse,

ein Beispiel für einen einfachen Webservice der einen String überträgt hier mal gespotet. Du kannst das Binding in ein BasicHttpBinding umändern und das sollte auch ganz normal unter .Net 3.0 funktionieren. Du kannst WCF nicht mit WebService vergleichen weil WCF ein Container für viele verschiedene Services ist und Webservice wahrscheinlich ein ASXMA Service darstellen soll.

Gruß Daniel

04.09.2008 - 11:17 Uhr

Hallo 🙂

Ich glaube wir haben aneinander vorbeigeredet. Der Backgroundworker auch in WPF kann dafür genutzt werden aber der macht auch nix anderes als das DispatcherSynchronizationContext zu benutzen um die GUI über den Dispatcher zu aktualisieren 🙂 Daher ^^ Ich wollte nur den Dispatcher in Vordergrund stellen, nicht das er auf die Idee von einem Invoke kommt 🙂 Backgroundworker oder eigener Thread ist dabei egal 🙂

Gruß Daniel

04.09.2008 - 09:28 Uhr

Hallo Virussoul,

der BackgroundWorker kann für die Abarbeitung der "aufwendigen" Arbeit genommen wie ein Thread klar aber um die GUI in WPF von einem anderen Thread zu aktualisieren muss man den Dispatcher benutzen.

Gruß Daniel

03.09.2008 - 13:52 Uhr

Das ist korrekt 1252 ist default Windows. Aber man muss aufpassen das DOS aber auch die Kommandozeile z.b. in Windows XP die CodePage 437 benutzen! Codepage 437 ist die allgemeine ASCII 8bit Variante die Codepage 1252 ist die Westeuropäische ASCII erweiterung 😉

Gruß Daniel

03.09.2008 - 12:55 Uhr

Beschreibung:

Hallo liebe Community,

aus gegebenen Anlass in der Firma habe ich mich mit WCF beschäftigt. Ich habe ein, denke ich, minimalistisches Testprojekt erstellt. Dieses möchte ich euch natürlich nicht vorenthalten.

Zunächst was macht das Projekt an und für sich? Ein Server wird gestarten Folgend wird der Client gestartet der eine Anfrage an den Server schickt. Der schickt eine Antwort an den Client. Die Ausgaben werden im jeweiligen Konsolenfenster dargestellt.

In dem Projekt wird zunächst das sogenannte Contract erstellt. Bei uns sieht es so aus das es ein Interface mit einer Klasse die diese Implementiert als DLL zur verfügung gestellt wird. Diese DLL muss bei Host und Client verfügbar sein.

Folgend habe ich den Host erstellt. Der Host erstellt einen sogenannten ServiceHost der den Service darstellt. Konfiguriert wird der Host über die App.Config.

Danach kommt nur noch der Client. Dieser erstellt wieder nur ein Client Objekt das über dessen App.Config wieder eingestellt wird.

Über Kommentare Anregungen und Korrekturen freue ich mich natürlich gern.

Gruß Daniel

Schlagwörter: WCF, Windows Communication Foundation, Netzwerk, Network, Communication

03.09.2008 - 11:25 Uhr

Hallo herbivore,

stimmt ist richtig. Ich habe gerade nachgeschaut wie ich es gelöst hatte und ich hatte einfach die Codepage 437 genommen die weil es die häufig genommenste 8bit erweiterung von ASCII ist. Würde also folgend aussehen:


Encoding.GetEncoding(437).GetBytes(...)

gruß Daniel

03.09.2008 - 11:11 Uhr

Hallo herbivore,

ich meine auch nicht Encoding.ASCII sondern ich weiß die funktion nicht mehr ganz aus dem Kopf aber die geht ca so:


Encoding("ASCII").GetBytes();

und ich meine das das auch ASCII mit über 128 zurückgegeben hat.

Gruß Daniel

03.09.2008 - 09:25 Uhr

In deinem Beispiel muss es sogar so sein 🙂 Am besten schaust du dir mal die Encoding Klasse an da kannst du angeben das du es gerne in Ascii haben möchtest und dann kriegst du auch den richtigen Wert raus.

Gruß Daniel

03.09.2008 - 09:22 Uhr

Also die performance ist echt Schick auch was Javascript angeht. Leider sagt er wenn es Webseiten mit Java gibt das er kein Plugin findet 🙁 Das ist leider sehr schade weil wir tagtäglich mit einer Java Anwendung die über den Webbrowser gestartet wird arbeiten. Java != Javascript wenn jetzt ein paar Leute darauf kommen 🙂

30.08.2008 - 14:19 Uhr

Wie ich schon gesagt habe um das wirklich tauglich zu lösen muss man DirectX OpenGl benutzen. Am einfachsten geht das ganze in .Net mit WPF ^^ Oder es gibt auch glaube ich OpenGL Controls die dort innerhalb OpenGL rendern damit würde es wohl auch gehen.

29.08.2008 - 11:49 Uhr

Hallo,

wie gesagt ist es blöd mit GDI+ und Transparenz zu arbeiten. Der einzigst mir bekannte funktionierende Weg wäre es den Inhalt des Panels zu bereichnen und entsprechend in schwächeren Farbtönen wieder zugeben um eine "vorgegaukelte" transparenz zu enthalten. Für wirkliche Transparenz kannst du z.b. WPF benutzen weil das auch auf DirectX zurückgreift.

28.08.2008 - 22:37 Uhr

Hallo tonka,

ja da bist du auf eine Neuerung von WPF gestoßen. Die GUI in WPF arbeitet mit einem Dispatcher, welches grob ein Thread ist der in Reihenfolge der Priorität die Aktionen im GUI Thread einreiht und ausführt. Dispatcher ist das Stichwort was du suchst um deine Applikation Multi-Threading fähig zu machen 😉
Hier ein Text über den Dispatcher damit du einen Überblick hast.

Gruß Daniel

27.08.2008 - 21:03 Uhr

Hallo,

was funktionieren sollte ist das du dich über TAPI verbindest und damit einen Anruf direkt beenden kannste ohne oder nur ganz kurz abzunehmen.

Gruß Daniel

25.08.2008 - 16:35 Uhr

Hallo,

vielleicht solltest du dir mal folgendes Ansehen:
FastBitmap

Die Bitmap-Klasse mit Get und Set Pixel ist deutlich schlecht geeignet für die Bildverarbeitung.

Gruß Daniel