Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von tonka
Thema: WPF: Bei Window-Resize nur Fensterrand anzeigen
Am im Forum: GUI: WPF und XAML

Hy@all,

ich suche nun seite geraumer Zeit mit Google vergebens nach einer Möglichkeit, wie ich beim Resize eines WPF-Window nur den Rahmen zeichnen lassen kann. Gibt es hier mit WPF schon Lösungen? Mir würde auch schon ein Stichwort reichen (denke das ich die ganze Zeit nach dem falschen Namen suche).

MfG
Tonka

Thema: WPF: Probleme mit GridSplitter
Am im Forum: GUI: WPF und XAML

Hey talla,

Das der GridSplitter nur fixe Höhen/Breiten einstellt habe ich mir schon gedacht.

Zitat
Alternativ würd ich einfach in der unteren Zeile nen Expander nehmen den man auf und zuklappen kann statt die CheckBox. Wenn dann die Zeilenhöhe auf Auto ist, vergrößert und verkleinert die Höhe sich dann automatisch.
Der Vorschlag ist gut, jedoch kann ich es aus bestimmten Gründen hier leider nicht so machen.

Werd mich einmal damit beschäftigen ob es möglich ist den GridSplitter abzuleiten und eine Art reset einzubauen.

MfG
Tonka

Thema: WPF: Probleme mit GridSplitter
Am im Forum: GUI: WPF und XAML

Hy@all,

ich habe momentan ein Problem mit dem GridSplitter.

Ich habe ein Grid mit 3 Rows. In der ersten Ziele ist ein TreeView der immer eingeblendet ist. In der zweiten Zeile ist ein GridSplitter - der per default nicht sichtbar (collapsed) ist. In der dritten Zeile ist wieder ein Grid - Das ebenfalls per default ausgeblendet ist.

Nun zum Problem:
Wenn der User eine Checkbox aktiviert, werden Zeile 2 und 3 eingeblendet (mittels Binding). Der GridSplitter funktioniert und man kann die beiden UI-Element (Zeile 1 und 3) hin un her bewegen. Jedoch wenn man die Checkbox wieder deaktiviert und somit die Zeile 2 und 3 wieder Collapsed werden bleibt die Gridmanipulation leider aufrecht (siehe Bild). Ich habe jetzt schon vieles probiert, jedoch gelingt es mir nicht einen Reset der GridSpillters beim Ausblenden aufzurufen.

Kennt jemand von euch eine Lösung für dieses Problem???

MfG
Tonka

Thema: Visual Studio Setup: Versionsmakro ??
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich erstelle gerade mit VS2010 ein Setup. Es funktioniert alles prima, jedoch eine Sache bringe ich einfach (auch mit hilfe von google) nicht zusammen. Ich würde gerne meine Setup-Version automatisch in den Productnamen und in den Dateinamen setzten. War von VS bisher bei den meisten Dingen gewohnt, das man dafür ein Makro hat aller "[PRODUCTVERSION]".

Weiß jemand von euch, wie ich das mit VS-Mitteln bewerkstellingen kann?

MfG
Tonka

Thema: Verschlüsselung einer Datei mit C# die man mit VC++ (unmanaged) wieder lesen kann
Am im Forum: Rund um die Programmierung

Hallo,

ich möchte einige Daten mit einem C#-Programm (WCF-Service) verschlüsselt in eine Datei schreiben. Am besten wäre eine XML-Datei. Soweit so gut, das hätte ich noch selbst zusammengebracht xD. Diese Datei müsste ich mit vc++, also unmanged ebenfalss wieder einlesen können.

Gibt es hier "Standardmittel" oder etwaiges?? Kenne mich leider in der Verschlüsselung nicht wirklich gut aus.

MfG
Tonka

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Problem gelöst :-D

Man kann es so schreiben wie ich es von Anfang-an gemacht habe, jedoch muss die Klasse die man Draged als Serialisierbar markiert sein.

Danke für die Hilfe.

MfG
Tonka

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Zitat
dahingehend verstehe, dass du das dragging nur startest, wenn beide maustasten gehalten werden?
Das ist richtig. Die linke Maustaste brauch ich schon für was anderes. Wollte ursprünglich nur die rechte Maustaste dafür benutzten, jedoch funktioniert das scheinbar in WPF nicht!
Zitat
Du müsstest also die Werte deiner Matrix mw in ein (2dim?)Array schreiben, das Array verschicken, und bei Empfang daraus eine neue Matrix instanzieren.
Die Matrix ist keine einfache Wertematrix, diese beinhaltet viele andere Matrizen und Referenzinformation => somit werd ich es mal mit einer Serialisierung versuchen.

MfG

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Zitat
und mir fällt auf, dass du mal "Matrix2D" benennst, mal "LightMatrix2D".

Mein Fehler, Matrix2D ist die Basisklasse - habs korrigiert, ändert aber nichts!
Zitat
wie startest du denn das dragging?


        private Point RightMouseButtonDownLastPosition;

        private void UserControl_MouseMove(object sender, MouseEventArgs e)
        {
            if (!IsActive)
            {
                return;
            }
            if (e.LeftButton != MouseButtonState.Pressed || e.RightButton != MouseButtonState.Pressed )
            {
                return;
            }
            Vector diff = RightMouseButtonDownLastPosition - e.GetPosition(null);
            if (Math.Abs(diff.X) > SystemParameters.MinimumHorizontalDragDistance &&
                Math.Abs(diff.Y) > SystemParameters.MinimumVerticalDragDistance)
            {
                DataObject dragData = new DataObject(typeof(Matrix2D), Matrix);
                DragDrop.DoDragDrop(this, dragData, DragDropEffects.Move);
            }

            
        }

        private void UserControl_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            RightMouseButtonDownLastPosition = e.GetPosition(null);
        }

MfG

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Das habe ich mir auch schon gedacht. Das werde ich in den nächste Tagen einmal in einer Testapplikation testen.

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Naja, bin mir nicht sicher ob mir das weiterhilft. Vielleicht muss ich das Object COM-fähig machen, damit ich das tun kann!?

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Nein, was soll das ändern??

Thema: Visual Studio 2010 (Premium): Studio hängt bei Debug-Prozess
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat
Visualizer kannst du dir wie Extensions für den Debugger vorstellen. Ein gutes Beispiel wäre Mole
Aso. Ich benutzte keinen Visualizer (aber das klingt interessant :-D ).
Zitat
Du sagtest "Drag N Drop" - geht es zufällig um hier dieses Problem Drag N Drop Exception?
Jein. Aus meiner Sicht sind das zwei seperate Problem, somit hab ich diese in 2 Threads aufgeteilt => oder irre ich mich da?

Thema: Visual Studio 2010 (Premium): Studio hängt bei Debug-Prozess
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

Visualizer? Es ist ein WPF Projekt.

Thema: [gelöst] COMException bei prozessübergreifendem Drag N Drop
Am im Forum: GUI: Windows-Forms

Hy@all,

ich habe ein interessantes Problem mit Drag N Drop. Ich habe in meinem Programm Drag N Drop realisiert. Man kann in zwei (oder beliebig viele) Fenster (gleiche Klasse) Dateien laden (das Programm ist eine Art Viewer) und dann das eine Fenster auf das andere droppen. Wenn die Fenster-Instanzen innerhalb einer Programm-Instanzen laufen scheint es zu funktionieren. Start ich jedoch zweimal die exe und Droppe das eine Fenster auf das andere, so bekomme ich folgende Exception

Fehler
COMException wurde nicht von Benutzercode behandelt
Ungültige tymed (Ausnahme von HRESULT: 0x80040069 (DV_E_TYMED))

Und hier ist meine Implimentierung:


private void LDV_DragOver(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(typeof(Matrix2D)))
            {
                e.Effects = DragDropEffects.None;
                //e.Handled = true;
            }

        }

private void LDV_Drop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(LightMatrix2D)))
            {
                Matrix2D DroppedMatrix = e.Data.GetData(typeof(Matrix2D)) as Matrix2D; // hier kommt die Exception
                if (DroppedMatrix == null)
                {
                    MessageBox.Show("Could not recive dropped matrix");
                    return;
                }
                if (DroppedMatrix == this.LDV.Matrix)
                {
                    return;
                }
                _DroppedMatrix = DroppedMatrix;
                CMOperations.IsOpen = true;
            }
        }

Weiß jemand warum das passiert?

MfG
Tonka

Thema: Visual Studio 2010 (Premium): Studio hängt bei Debug-Prozess
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hy@all,

ich habe seit kurzem ein "witziges" Problem. Mein Studio hängt sich beim aktivwerden eines Breakpoint auf. Dies tritt bei mir aber eigentlich nur in Verbindung mit einem Drag N Drop Ereignis auf.

Ich habe zwei Fenster (selbe Klasse). Von dem einen Fenster wird auf das eine Fenster was gedropt und ab diesem Zeitpunkt hängt VS einfach beim debuggen. Mach ich das ganze ohne Debug, so bekomme ich kein Problem.

Hatte jemand auch schon einmal soetwas???

IDE: Visual Stuio 2010 Premium
OS: WinXP x64 SP2

MfG
Tonka

Thema: [gelöst] WPF: Sperre bei unerwünschten Drop (Drag N Drop) funktioniert nicht
Am im Forum: GUI: WPF und XAML

Konnte das Problem selbst lösen.

Statt dem DragEnter-Event muss das DragOver-Event benutzt werden. Außerdem muss man e.Handled auf true setzten.


private void Window_DragOver(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent("FileName") || sender == e.Source)
            {
                e.Effects = DragDropEffects.None;
                e.Handled = true;//WICHTIG!
            }
        }

        private void Window_Drop(object sender, DragEventArgs e)
        {
            try
            {
                if (e.Data.GetDataPresent("FileName"))
                {
                    string[] filenames = e.Data.GetData("FileName") as string[];
                    if (filenames != null && filenames.Length > 0)
                    {
                        this.OFD.FileName = filenames[0];
                        Load(this.OFD.FileName);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while drop: " + ex.Message, "Error");
            }
        }

MfG
Tonka

Thema: [gelöst] WPF: Sperre bei unerwünschten Drop (Drag N Drop) funktioniert nicht
Am im Forum: GUI: WPF und XAML

Hy@all,

ich habe ein Problem mit Drag N Drop. Ich habe ein ganz simples Window, wo ich einen Dateipfad aus z.B. dem Explorer "hinein-drope" - das funktioniert auch prima, jedoch möchte ich, dass bei unerwünschte Drops (z.B. es wird ein Bild gedropt, Datei-Extension passt nicht) kein Drop-Cursor-Symbol angezeigt wird. Eigentlich dachte ich, dass das mit ...


 e.Effects = DragDropEffects.None;
das eigentlich erledigt sein sollte, jedoch funktioniert das nicht wirklich.

Hier ist mein Code für die Drag N Drop Aktionen:


        #region Drag N Drop

        private void Window_DragEnter(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent("FileName") || sender == e.Source)
            {
                e.Effects = DragDropEffects.None; // dieser Abschnitt wird in der runtime erreicht, jedoch zeigt das cursor-symbol an das gedropt werden kann, aber wieso??
            }
        }

        private void Window_Drop(object sender, DragEventArgs e)
        {
            try
            {
                if (e.Data.GetDataPresent("FileName"))
                {
                    string[] filenames = e.Data.GetData("FileName") as string[];
                    if (filenames != null && filenames.Length > 0)
                    {
                        this.OFD.FileName = filenames[0];
                        Load(this.OFD.FileName);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error while drop: " + ex.Message, "Error");
            }
        }

        #endregion

Mach ich hier irgendetwas falsch, ist e.Effects für etwas anderes gedacht?

MfG
Tonka

Thema: SpamMails künstlich Bouncen lassen
Am im Forum: Netzwerktechnologien

Hey,

1.) laut dieser Seite benutzten das schon einige Spam-Filter!

2.) Sollte der Absender nicht existieren (kann ja irgendwas bei SMTP sein), könntest du unter Umständen ebenfalls Bounce-Mails bekommen. Also solltest du auch schauen, wie du deine Mails makieren kannst, sofern das möglich ist.

Solltest du ein Plugin haben, würd mich das auch interessieren!

MfG
Tonka

Thema: Suche einfaches Dokumentverwaltungssystem mit C#-API und Versionierung
Am im Forum: Rund um die Programmierung

Servus,

ich würd sagen das du WSS (Windows SharePoint Services) benutzten kannst.

MfG
Tonka

Thema: Parallel.For: Initalisierung des ThreadLocalState mehr als einmal - aber warum?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oooooh man, bin ich blind *gggggg*

Was lernt man daraus, man sollte NIE zu spät noch programmieren ;-)

Probier das morgen bei großen Tracer aus!

Thema: Parallel.For: Initalisierung des ThreadLocalState mehr als einmal - aber warum?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So hast du das also gemeint. Ich habe kurz deinen Code in mein Schema übersetzt, jetzt bekomme ich aber ein NullReferenceException

Zitat
NullReferenceException not set to an instance of an object
Object reference not set to an instance of an object.

Ich gehe mal davon aus dass das die Meldung daher kommt, das der GC das object terminiert hat, oder?


//Tracer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ParallelObjectTest
{
    public class Tracer
    {
        [ThreadStatic()]
        private static WeakReference _WeakRefScene = null;

        public readonly Scene3D scene = null;

        public Tracer(Scene3D Scene)
        {
            this.scene = Scene;
        }

        public Scene3D CloneScene(Scene3D SceneToClone)
        {
            // hier muss noch Clone implimentiert werden
            return null;
        }

        public void Start()
        {
            List<object> objects = new List<object>();
            object lockobj = new object();

            double sum = 0.0;

            Parallel.For<double>(0, 10000, () =>
                {
                    Scene3D s = null;
                    if (_WeakRefScene == null)
                    {
                        s = CloneScene(this.scene);
                        objects.Add(s);
                        _WeakRefScene = new WeakReference(s);                        
                        Console.WriteLine("neues scene-objekt für thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
                    }
                    else
                    {
                        Console.WriteLine("bestehendes objekt fuer thread: " + Thread.CurrentThread.ManagedThreadId.ToString());
                        s = (Scene3D)_WeakRefScene.Target;
                    }
                    s.Intersect();// hier passiert die NullException
                    
                    return 0.0;
                },
                (k, state, localstate) =>
                {
                    Console.WriteLine("k= " + k);
                    Thread.Sleep(1);
                    return 0.5;
                },
                (localstate) =>
                {
                    lock (lockobj)
                    {
                        sum += localstate;
                    }
                });

            objects.Clear();

        }
    }
}


//Scene3D.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParallelObjectTest
{
    public class Scene3D
    {
        public bool Intersect()
        {
            // Funktion für Verschneidung für der Dreiecke
            return true;
        }
    }
}


//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParallelObjectTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Scene3D scene = new Scene3D();
            Tracer tracer = new Tracer(scene);
            tracer.Start();
            Console.WriteLine("press key for EXIT");
            Console.ReadLine();
        }
    }
}


Für mich kommt nur diese Variante in Frage, da das Scene3D Object dauernd arbeitet, somit bringt mir das zurücklegen nichts.

Thema: Parallel.For: Initalisierung des ThreadLocalState mehr als einmal - aber warum?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo winSharp93,

Danke für deine Antwort.

Zitat
Sicher, dass du das Objekt nicht auch zerstören willst, nachdem alle Aufgaben abgearbeitet sind?
Das ist fürm mich eigentlich ein das selbe - ich geh mal davon aus das du meinst wann es von GC zerstört wird, oder?
Zitat
Dann bleibt dir vielleicht noch die Kombination aus mit ThreadStaticAttribute markierten WeakReferencen und einer statsischen Liste:
Prüfe jedes Mal (evtl. auch in dem Initialisierungscallback; dann ist ja egal, wie oft es aufgerufen wird), ob das entsprechende Feld null ist. Wenn ja, erstellst du es und speicherst es in der Liste.
Am Ende musst du dann nur alle Elemente in der Liste disposen bzw. die Liste nullen, damit die Objekte tatsächlich eingesammelt werden können.
Ohne die Verwendung einer Liste kann es vorkommen, dass die Objekte evtl. schon vom GC eingesammelt werden, obwohl der entsprechende Thread nochmal aktiv werden könnte - die WeakReferencen verhindern hingegen, dass ein Thread die Objekte länger als nötig am Leben erhält (wenn er z.B. wieder in den ThreadPool zurück kehrt).

Das klingt sehr gut, wusste nicht das es soetwas gibt. Jedoch habe ich hier Code-technisch einige Probleme das umzusetzt, da mir nicht ganz klar ist wo genau ich im Code das platzieren soll.

Hier ist mein momentaner TestCode (vielleicht könntest du in korrigieren):


//LocalState.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ParallelDataAccessTest.Data
{
    public class LocalState
    {
        [ThreadStatic()]// ≤ meinst du das hier
        public readonly Scene3D scene = null;

        public LocalState(Scene3D s)
        {
            scene = s;
        }
    }
}


    public class Tracer
    {
        public Scene3D scene = null; // dieses Object wird von ausen zugewiesen und muss pro Thread geklont werden
        public List<Scene3D> scenes = null; // meintest du das mit der Liste???

        public LocalState InitThreadLocalState()
        {
            Console.WriteLine("Init threadlocalstate ThreadID= " + Thread.CurrentThread.ManagedThreadId.ToString());

// hier ist mir leider nicht ganz klar, wie ich das von dir beschrieben Verhalten implimentieren soll!!!
           
            LocalState loci = new LocalState();
            return loci;
        }

        public void Start()
        {
            Stopwatch watch = new Stopwatch();
            Int32 size = 1000;
            LocalState Sum = new LocalState();           

            scenes = new List<Scene3D>();

            watch.Restart();
            Object localobj = new object();
            Parallel.For<LocalState>(0, size, () => InitThreadLocalState(), (k, loop, localstate) =>
            {
                localstate += Trace();
                Console.WriteLine("ThreadID= " + Thread.CurrentThread.ManagedThreadId.ToString() + " k= " +k.ToString());
                return localstate;

            },
            (localstate) =>
            {
                lock (localobj) { Sum += localstate; } }
                    );
            watch.Stop();

            Console.WriteLine("zw= " + Sum.ToString());
            Console.WriteLine("time= " + watch.Elapsed.ToString());
        }

Was soll ich genau ion der Liste speichern, die LocalStates, oder meine Klon-Objekte? Soetwas ähnliches habe ich schon probiert und habe dann eine OutOfMemoery-Exception bekommen.

Was bringt mir eigentlich die WeakReferencen, denn was macht es für einen Sinn, das der GC das Objekt terminieren kann obwohl es noch in Verwendung ist???
Zitat
Alternativ kannst du vielleicht auch eine Art Pool implementieren?

Das habe ich mir auch schon gedacht, würde aber lieber Parallel.For benutzten, da hier angeblich die Performance besser ist!

MfG

Thema: Parallel.For: Initalisierung des ThreadLocalState mehr als einmal - aber warum?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mittlerweile habe ich herausgefunden, das die "Parallel.For" einige Thread-Zyklen den LocalState mitspeichert und nach "Hausnummer 10" die localstates zusammenzählt, egal wieweit die Schleife ist, und dann wird der LocalState neu initialisiert.

Somit stellt sich für mich die Frage, wie kann ich einem Thread einmal ein Objekt mitgeben, das den ganzen Lebenszyklus des Thread hindurch nicht verändert wird. Das Objekt muss zur Erstellung des Thread erzeugt und beim Zerstören des Threads zerstört werden => Somit ist der LocalState dafür nicht geeignet! Außerdem darf das Objekt nicht geshared werden!

Weiß hier irgendwer wie man soetwas realisieren kann?

Thema: Parallel.For: Initalisierung des ThreadLocalState mehr als einmal - aber warum?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hy@all,

ich habe ein Problem bei der Initalisuerung des ThreadLocalStates.


Ich möchte pro Thread einen Clone eines Objekt ablegen. Nun habe ich einfache eine Init-Methode für den ThreadLocalState geschrieben, die diesen Clone erstellt und im localState zu Verfügung stellt. Nach dem Testen habe ich gesehen, das die Init-Methode öfters als die Anzahl der Threads aufgerufen wird - aber warum? Ich dachte bis jetzt das diese nur bei der Thread-Erstellung aufgerufen wird.

Hier der Testcode:


Parallel.For<double>(0, size, () => InitThreadLocalState(), (k, loop, localstate) =>
            {
                Vector3D r = new Vector3D(1, 0, 0);
                return localstate;

            },
            (localstate) =>
            {
                lock (localobj) { Sum += localstate; } }
                    );

Wenn diese Verhalten normal ist, wie kann ich dann meine Init-Methode nur zur Threaderstellung aufrufen?

MfG
Tonka

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

So, hab den "Fehler" jetzt gefunden. Es ist tatsächlich der Zugriff auf das Scene3D-Objekt. Umso mehr Zugriff auf Scene3D ausgeführt werden umso langsamer wird das Programm. Das einzige was mir einfällt ist, für jeden einzelnen Kern einen Klon des Scene3D-Objekt zu erstellen (und im ThreadLocalState speichern) um keine gemeinsamen Resource zu nutzten!

Ist diese Annahme falsch?

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
du hast hier mehrere mögliche Ursachen und du hast nicht eine einzige bislang ausschließen können...

Welche sollten das sein, das lock'en für den Fortschrittszähler hab ich scho ausgeschlossen, das auslösen des Events habe ich ebenfalls auskommentiert und alle schreiben Zugriff sind deaktiviert => Ergebnis: Einfluss nicht Nennenswert. Das einzige was übrig bleibt ist das Scene3D Objket, auf das nur lesend zugegriffen wird. Ein tracer ist ja eigentlich sehr simpel aufgebaut

1.) Lese Strahl aus Datei ein
2.) Verschneide alle Dreiecke mit dem Strahl und gib mir das näheste Dreick zurück
3.) berechnen Brechung/Reflexion/Absorbition etc.
4.) generiere neuen Strahl
5.) widerhole Schritt 2 bis 4 bis kein Dreieck mehr getroffen wird

Die Schritt 1 bis 4 greifen lesen auf Scene3D zu, auf sonst nichts. Der Schritt 2 bis 4 wird tausendemale aufgerufen

Welche Fehlerursachen bleiben da noch über?

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Naja, das Problem ist ja schon lokalisiert, ich habe nur ein großes Scene3D-Objekt, das sich die Threads teilen, alle anderen Variablen werden lokal in den einzelnen Threads erstellt.

Ich verstehe ja das Problem, hab nur nicht die gerinste Ahnung wie ich das anderes schreiben könnte.

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Jetzt hab ich schon davon gehört :-D

Ok, so in der Art hab ich mir das schon gedacht, jedoch fällt mir nicht wirklich ein Lösung für das Problem ein. Muss ich das Scene3D Objket in seine Einzelteil aufspalten, oda wie kann ich diesem Problem entgegenwirken?

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
eben drum kann es ja passieren, dass die Threads sich gegenseitig aus dem (gemeinsam benutzen L2-)Cache werfen. Würden alle die gleichen Daten benutzen, würde das ja gerade nicht passieren.

Das verstehe ich jetzt nicht ganz. Ist das Objekt Scene3D (in dem alle Dreiecke, Strahlen, etc. gespiecher sind) das Problem, da die Threads die Funnktionen und somit die Daten des Objekts benutzten?? Wenn ja, wie kann man sonst die ganzen Daten zu Verfügung stellen.

MfG

Thema: Parallel.For - Core-Auslastung liegt nur bei 60% !
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Versuche es auch mal in einem Performance-Profiler. Der kann die sagen, wo Wartezeiten entstehen bzw kann er einem hinweise darauf geben.

Den probiere ich gerade aus - ich kann jedoch leider die Option "Verhalten der Multithreadanwendung visualisieren" aktiveren => "Erfordert Infrastruktur, die unter dieser Version von Windows nicht verfügbar ist". Ich habe WinxP x64, das ist vermtulich das Problem => kann man da irgendetwas nachinstallieren?

Gibts für den "Concurrency Visualizer" irgendwo eine gute Beschreibung, ich blick da momentan nicht so durch?