Laden...
Avatar #avatar-3200.jpg
unconnected myCSharp.de - Member
Softwareentwickler Oerlinghausen/NRW Dabei seit 13.08.2006 849 Beiträge
Benutzerbeschreibung

Forenbeiträge von unconnected Ingesamt 849 Beiträge

10.10.2013 - 08:30 Uhr

Hallo,

ich habe ein Programm geschrieben das jetzt schon ein paar Monate unterbrechungsfrei läuft.
Das Programm hat sich dabei immer weiter mit Speicher vollgezogen und hat inzwischen 1,6 GB an speicher unter beschlag. Ich habe mir einen Dump gemacht und den mit WinDbg analysiert (Was das angeht habe ich leider nur einen sehr begrenzten Wissensstand)

Wenn ich nun einen !dumpheap -stat ausführe sind die letzten Zeilen folgende


              MT    Count    TotalSize Class Name
.
.
.
000007fee7852688      712        79744 System.Reflection.RuntimeMethodInfo
000007fee785f508     1011        80880 System.Collections.Hashtable
000007fee785e068      861        98300 System.Int32[]
000007fee78c19e0     1998       111888 System.Diagnostics.StackFrame
000007fee62c3550     1652       158592 System.Diagnostics.NtProcessInfoHelper+SystemThreadInformation
000007fee785b0b0     1013       256368 System.Collections.Hashtable+bucket[]
000007fee785d608     5523       309288 System.RuntimeType
000007fee785c5a0      355       371212 System.Char[]
000007fee783f5e0     5105       792776 System.Object[]
000007fee785f490      233       929502 System.Byte[]
000007fee785b318     9773      1157990 System.String
000007fee784d6e8       14      1812040 System.Int64[]
0000000000437260      104      2654270      Free
Total 54509 objects
Fragmented blocks larger than 0.5 MB:
            Addr     Size      Followed by
00000000015f8bc0    1.8MB 00000000017c6f50 System.SByte[]


Also wie man sieht nicht die Bohne von hinweis wo meine 1,6 GB hin sind.. Der dürfte sich eigentlich nur ein paar MB nehmen. Ich vermute das eventuell native Sachen sind die da den Speicher blockieren.. Aber wie bekomme ich so etwas raus?

Speicher ist noch genug da, somit kann ich mir auch vorstellen das der GC mir da ein Schnäppchen spielt.. aber 1,6 GB?? Ich habe mich auch schon mit Just Trace von Telerik an den Process gehängt und einen GC run erzwungen.. -> nichts.

Vllt kann mir jemand einen Hint geben wo ich noch schauen kann.

Grüße

03.10.2013 - 16:14 Uhr

Hi,

für solche Sachen ist PostSharp eine mächtiges Tool. Ich würde es nur deswegen nicht einführen, aber wenn Dir noch mehrere Anwendungsfälle einfallen, ist es eine Überlegung wert.

Gruß

Jan

01.10.2013 - 09:29 Uhr

Hallo,

also ich hatte das damals einmal für Silverlight und .net gemacht.

Ich habe 2 Projecte gemacht. In dem einen habe ich ganz normal meine Klassen erstellt, und in der anderen als Link eingebunden. Und falls dochmal was unterschiedlich war, habe ich mit precompile Anweisungen (#if SILVERLIGHT) gearbeitet. Hat für mich gut funktioniert.

Gruß

15.09.2013 - 13:44 Uhr

Ja, Du hast recht, der Kaffee hat noch nicht gewirkt.

Das kann nicht funktionieren weil ich ja als TypArgument von ControlRenderBase auch alle Ableitungen von LabelControl benutzen kann, was dann aber nicht mehr dem Interface entspräche.

Danke.

15.09.2013 - 12:06 Uhr

Hallo zusammen.

dachte eigentlich ich wäre Fit in Generics..

aber warum funktioniert das nicht :


public interface IControlRenderer
{		
     LabelControl Control { get; }
}

public abstract class ControlRenderBase<TLabelControl> :DrawingVisual,IControlRenderer where TLabelControl : LabelControl
{
     public TLabelControl Control { get; set; }
}


Fehlermeldung:
'DrawingVisualSample.ControlRenderBase<TLabelControl>' does not implement interface member 'DrawingVisualSample.IControlRenderer.Control'. 'DrawingVisualSample.ControlRenderBase<TLabelControl>.Control' cannot implement 'DrawingVisualSample.IControlRenderer.Control' because it does not have the matching return type of 'LabelDesigner.LabelControl'.

Hat es doch! Grml.

06.09.2013 - 13:18 Uhr

und irgendwie unter x64 ausführen

Nicht irgendwie. Einfach so.

04.09.2013 - 13:15 Uhr

Wenn Du Spiel als DataContext nimmst, kannst Du dann mit {Binding Spieler.Liste} auf deine ObservableCollection (wobei Liste ein Proberty ind der Klasse Spieler ist).

Alles was Du bindest muss ein Property sein. In diesem Zusammenhang solltest Du dir auch einmal die impl. von INotifyPropertyChanged angucken.

04.09.2013 - 07:02 Uhr

das Feld Name vom Typ string

Binden kannst Du nur public Propertys

Grüße

01.09.2013 - 01:20 Uhr

Nen verdammt grosser Wald 😃

GetNamedValue gibt dir in diesem Fall ein XmlAttribute zurück. Dieses kann man nicht einfach in ein Int convertieren. Du musst erst den Value aus dem Attribute holen, und den dann in int convertieren.

LG

19.08.2013 - 13:16 Uhr

Hi, hört sich für mich nach nem PropertyGrid an.

17.08.2013 - 17:13 Uhr

hallo,

hab das gerade einmal ausprobiert. Mit xsd2code funktioniert das ganze (auch Automatisch)

16.08.2013 - 14:58 Uhr

Bei den beiden Filenames fehlt jeweils das führende ' ausserdem müssen die Namen glaub ich auch in '

15.08.2013 - 08:12 Uhr

WCF ist vllt ein wenig dick für diese simple Sache, aber ich würds glaube ich der einfachheit halber damit machen.

14.08.2013 - 19:25 Uhr

Mit Devart gibt es einen drittAnbieter der Tools und treiber rund um das Thema Oracle/Ef bereitstellt. Allerdings weis ich nicht ob include hier mit ef4.3 zusammenarbeitet, aber ich habe auch noch nichts gegenteiliges gehört.

Ist allerdings kostenpflichtig.

13.08.2013 - 19:29 Uhr

Und wenn nicht kann er das gut mit dem xsd.exe (VS) tool aus dem Xml Generieren 😃

07.08.2013 - 12:09 Uhr

sorry mein fehler hab die Augen noch nicht richtig auf.. (Urlaub 😉 vergiss was ich gesagt habe.. war im falschen Film

07.08.2013 - 12:07 Uhr

Hallo icolor

Soweit ich weis funktionieren Parameter nur bei Werten, nicht bei Tabellennamen.
Ich denke Du wirst mit string.format oder ähnlichen Arbeiten müssen.

02.08.2013 - 15:41 Uhr

Hmm, also nur der Pfad der Assembly ist unbekannt? Was spricht dagegen bei Programmstart mit AssemblyResolve zu Arbeiten?

Dann kannst Du Sie zur Compile Zeit einfach Referenzieren und den Assembly Pfad z.b. in der AppConfig hinterlegen.

02.08.2013 - 15:35 Uhr

Hallo,

das sollte mit einem Reflector funktionieren.. zb.: Der kostenlose von Telerik: Just Decompile

19.07.2013 - 10:16 Uhr

Prüf mal ob user.BaseUser null ist.

19.07.2013 - 10:07 Uhr

Herzlichen Glückwunsch euch/uns 😃

18.07.2013 - 16:46 Uhr

WPF oder Silverlight?

Bei Silverlight damals war das schon ein wenig gehakke.. damals keine Ahnung wie das jetzt ist.

Bei WPF im Binding den UpdateSource Trigger auf PropertyChanged stellen.

Zu Frage 2 müsste ich raussuchen, wenn bis Morgen keine Antwort da ist schau ich mal in nem alten Projekt von mir.

16.07.2013 - 12:54 Uhr

Hi, hört sich für mich ersteinmal wie ein Threading Thema an.. aber wie gfoidl schon sagte, näheres kann man erst sagen mit ein wenig code.

15.07.2013 - 10:48 Uhr

Hallo,

Und bei "GetMemberAsnyc" wird halt die "Member" Auflistung gefüllt.

Nur gefüllt oder auch neu erzeugt? Wenn Du auch neu erzeugst würde ich auf ein fehlendes INotifyPropertyChanged tippen, bzw den Aufruf des selbigen.

15.07.2013 - 09:21 Uhr

Was hält Dich davon ab ein Performance Test zu machen?

Besser oder schlechter ist wohl Geschmackssache.. ich finde die untere übersichtlicher, obwohl da ja noch die Convertierung zu base64 fehlt im Vergleich zur oberen.

12.07.2013 - 07:45 Uhr

Was möchtest Du denn einsetzten? Du kannst aus allen .net projecten wcf ansprechen, Du musst nur eine Service Reference erzeugen.

11.07.2013 - 22:24 Uhr

Der Handshake sollte nicht dein Problem sein, weil Protokoll (Binding) abhängig. Hier wohl tcp. Ansonsten ist WCF nur reines XML + vllt ein paar headerdaten (Immer von der Default config ausgegangen).

11.07.2013 - 19:46 Uhr

Hi,

du kannst den den Command als nicht zu serialisieren kennzeichen (je nachdem welchen Serializer Du benutzt sieht das leider anders aus..). Wie Du schon sagtest, kannst Du Dir den Methodenname als string abspeichern, und den Funktionspointer beim deserialisieren oder im beim ersten Aufruf des Commands per Reflection wieder aufbauen.

07.07.2013 - 11:58 Uhr

Das Problem dabei ist, das Du das Feld erst garnicht abfragen darfst.. eine Tatsache die ich selbst schon immer sehr fragwürdig fand. Andererseits gab es damals noch keine Nullable Typen.

Schau mal hier: OracleDataReader.IsDbNull

07.07.2013 - 02:08 Uhr

Du hast einen null Wert in einem deiner Datensätze.
den musst Du explizit vorher abfragen, sonst kommt es zu diesem Fehler.

07.07.2013 - 02:04 Uhr

Du hast vollkommen recht!

dummerweise wird dieser nicht aufgerufen! Ich habe von IValueConverter abgeleitet, und diesen angegeben. Aber scheinbar geniesst DataContext hier Sonderrechte.

05.07.2013 - 08:16 Uhr

Du führst das ganze in einer schleife aus.

Soweit ich weis wird das event ProgressChanged mit dem Gui Thread gesynct und asyncron ausgeführt das braucht Zeit.

Das heisst wenn ProgressChanged wirklich gefeuert wird, ist deine schleife schon im nächsten durchlauf und hat den String schon wieder auf Trying gesetzt (vllt. sogar schon mehrmals).

So etwas nennt sich Race Condition.

04.07.2013 - 17:50 Uhr

Das Update 3 ist raus, verhalten genauso?

04.07.2013 - 15:16 Uhr

Ok,

da es ja scheinbar keinen Vernünftigen ansatz dafür gibt, sollte ich vllt schreiben wie mein derzeitiger Hack aussieht:

Ich erzeuge im Loaded Event des Controls mein ViewModel und impfe den Derzeitigen DataContext (in diesem Moment mein Datenobject) in das ViewModel ein. Danach setze ich den DataContext auf mein ViewModel. Nicht besonders schön, und gibt ne Menge Binding Fehler am Anfang.

29.06.2013 - 11:08 Uhr

Hallo,

ich habe vor diesem Problem schon öfter gestanden, und meist habe ich es dann mit irgendwelchen hacks umschifft.

Ich habe hier ein UserControl das an ein RowDetail einer RadGridView (telerik, aber ich denke das verhalten wird im WPF Grid das selbe sein) gebunden ist, und so Automatisch den DataContext der Row (also mein Datenobject) erbt. Dummerweise schleudert es mir aber damit mein mir erdachtes ViewModel (Das ich im Xaml festlege) in Richtung Garbage Collector.

Ich bräuchte im Prinzip eine schöne möglichkeit in der nicht mein gesamter DC ersetzt wird, sondern mein Datenobject in ein Property des DC geimpft wird. Gibt es da eine möglichkeit?

Hoffe ich habe mich einigermaßen verständlich ausgedrückt.

Grüße

28.06.2013 - 17:45 Uhr

Wenn Du das öfter bei mehreren Kunden machst, und optimaler Weis deinen eigenen Server hast, wären nuget packages vllt was für dich.

25.06.2013 - 22:20 Uhr

Hallo,

string.format und [Hinweis] Wie poste ich richtig? sollten deine Ansätze sein.

23.06.2013 - 22:03 Uhr

Hmm,

also, wenn ich an Regions denke, ist das für mich meist ein Zeichen dafür das Klassen einfach zu groß geworden sind. Deshalb teile ich sie dann, und verwende Regions eigentlich nur dann wenn es tatsächlich nicht anders geht.

20.06.2013 - 17:06 Uhr

Die IMHO mit JS/HTML leichter ist.

Puh wer Javascript WPF vorzieht isst auch kleine Kinder 😉

09.06.2013 - 01:20 Uhr

Hmm,

warum sollte man das tun? Und selbst wenn Du das verhindern könntest, gibt es andere Möglichkeiten das Object zu serialisieren.

08.06.2013 - 18:01 Uhr

Hmm, ist aber eine Studie des amerikanischen Marktes.

Ausserdem haben die ja durchnittlich 12,5 Jahre .Net Entwicklungs Erfahrung.. Sportlich wenn man bedenkt das .net1.0 erst 2002 erschienen ist 😃

06.06.2013 - 16:40 Uhr

Hallo,

dein DataSet benutzt intern ein System.DateTime, was auch immer eine Uhrzeit representiert. Das standard Format für dein System siehst Du wenn Du toString aufrufst. Wenn Du es anders haben möchtest, musst Du es entsprechend Formatieren. Gugst Du hier: Custom Date and Time Format Strings

Vllt hier der Hinweis auf [Hinweis] Wie poste ich richtig?

29.05.2013 - 22:11 Uhr

Hi, ist die dritte Komponente ausführbar?

Ich habe seit Jahren eine ClickOnce mit 7 Projecten (eine exe, 6 dlls) ohne Probleme am laufen. Und da muss man auch nichts einzeln deployen.

27.05.2013 - 16:49 Uhr

So, Du hast wahrscheinlich VS Express?

Schau mal hier: where-is-wcf-data-services-in-visual-studio-express-2012-for-web

und zu deinem Edit: Du hast doch bestimmt schon ein Asp Project was dein Silverlight Project hosted?

Aber wie gesagt da gibt massenhaft Tutorials zu, die dir das bestimmt 3 x besser erklären können als wir hier.

27.05.2013 - 16:21 Uhr

Rechtsklick auf das Project -> Add Service Reference -> Folge dem Wizard

edit: oh ich glaube ich habe das falsch verstanden.. Der Service existiert noch nicht? Dann musst Du in deinem ASP Project einen WCF Service hinzufügen.

ABER: Da gibt es so viele gute Tuts zu, das ich das hier nicht erklären möchte.

26.05.2013 - 23:22 Uhr

Wenn Du die Antwort schon weist, warum fragst Du dann?

26.05.2013 - 16:38 Uhr

Wenn ich jetzt mal meine Glaskugel kontaktiere.. würde ich sagen das das ein Fall für [FAQ] Warum blockiert mein GUI? ist 😉

17.05.2013 - 13:26 Uhr

Ja, ne.

es ist halt kein PNG. Dann hätte ich den Header gesehen. Aber der Header war halt der eines ZLIB Streams, nicht das eines PNG´s

Das PNG normalerweise auch Deflate benutzt werte ich jetzt mal als Zufall.

17.05.2013 - 11:06 Uhr

Hallo, (Vorsicht Lösung)

ich habe es doch noch lösen können.. Warum passiert das eigentlich immer NACHDEM man ein Post im Forum macht? Also zur Lösung:

Base64 war richtig.
LZ77 ist zwar auch richtig, aber es war derivat ein ZLib Stream. sharpziplib kann damit umgehen.

Dann war darin kein PNG enthalten (Warum sollte man auch dem generierenden Tool glauben, das es wirklich reinsteckt, was es sagt das es reinsteckt..). Es war eine Simple BitMatrix.

Mit folgendem Code kann man das Beispiel lösen:

(64 ist übrigens keine Magik Number sondern Bytes per pixelrow)


var bytes = Convert.FromBase64String(testMimeBase64);           
            

            using (var stream = new InflaterInputStream(new MemoryStream(bytes)))
            {                     
                
                var bytesResult = stream.ToByteArray();

                for (int i = 0; i < bytesResult.Length; i++)
                {
                    bytesResult[i] = (byte) ~bytesResult[i];
                }

                var bit2 = new Bitmap(64*8, (int)(bytesResult.Length/64), PixelFormat.Format1bppIndexed);

                var lockbits = bit2.LockBits(new Rectangle(0, 0, 64*8, (int) (bytesResult.Length/64)), ImageLockMode.WriteOnly, PixelFormat.Format1bppIndexed);

                System.Runtime.InteropServices.Marshal.Copy(bytesResult,0, lockbits.Scan0, bytesResult.Length);
                bit2.UnlockBits(lockbits);
}

Danke trotzdem 😃