Laden...

Forenbeiträge von Raptor 2101 Ingesamt 119 Beiträge

30.08.2008 - 09:41 Uhr

Check mal ob du ein rechteproblem hast.

gib deiner instanz TEMPORÄR admin rechte

wenn es dann tut wechsel wieder auf den normalen user und bewaffne dich mit filemon von sysinternals (jetzt von microsoft gehosted/gekauft) damit kannste rausfinden wo der iss zugreift und ne was dort passiert... wenn du ein rechte problem hast dann findest du es so...

29.08.2008 - 21:36 Uhr

Das hatte ich schon ausprobiert, bringt bei mir keine änderung. der eventarg bleibt leer.

der witz ist, die ändere methode über


GridViewRow row = GridView1.Rows[e.RowIndex];
((TextBox)row.Cells[1].Controls[0]).Text;

funktioniert hingegen... also am Postback kann es nicht liegen

29.08.2008 - 10:19 Uhr

Ich hab ein kleines problem mit dem GridView-RowUpdating event.

Wenn ich eine DataSource per ASPX tags erzeuge und per ID an die GridView binde funktioniert alles wie es soll. Ich bekomm im EventArg die neuen und alten werte mitgeteilt.

Versuch ich das gleiche mit einem Dynamisch erzeugten code, ist der EventArg leer und ich bekomme nur noch die Row-Number die editiert wurde.
Ich hab schon im netzt gesucht, steh aber entweder auf dem schlauf oder versteh das prinzip nicht

der verwendete code...

namespace Sandbox
{
    public partial class _Default : System.Web.UI.Page
    {
        SqlDataSource dataSource;
        protected void Page_Load(object sender, EventArgs e)
        {
            dataSource = new SqlDataSource();
            dataSource.ConnectionString = "Data Source=localhost;Initial Catalog=testdaten;Integrated Security=True";
            dataSource.ProviderName = "System.Data.SqlClient";
            dataSource.SelectCommand = "Select * From something";
            dataSource.UpdateCommand = "UPDATE telegramm SET nothing=@nothing WHERE noting=@something";
            
            if (!IsPostBack) 
            {
                

                GridView1.DataSource = dataSource;
                GridView1.DataBind();
            }
        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            this.GridView1.EditIndex = e.NewEditIndex;
            GridView1.DataSource = dataSource;
            GridView1.DataBind();
        }

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

        }
    }
}
<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="True" onrowediting="GridView1_RowEditing" 
            onrowupdating="GridView1_RowUpdating">
        </asp:GridView>
24.08.2008 - 17:19 Uhr

du erzeugst nicht einfach nur die connection neu, du erzeugst alles neu in der schleife und das ist falsch. egal wie du es drehst.

nochmal: das ist bewusst so gemacht, jeder durchlauf einer schleife soll einmal den seitenaufbau einer seite simulieren. Von 50 Flights bis 1050. jeder dieser schleifendurchläufe soll ein Ergebniss liefern welches unabhängig vom vorherigen oder nächsten durchlauf ist. Schlussendlich stellt es die Rqeustes von X usern nach, die alle zu unterschiedlichen Piloten die Flights abfragen. Daher wird für jeden Durchlauf ein eigenes XML Document, DataSet und SqlCommand-Object benötikt,

du triffst eine aussage mit diesem test. jeder, der vergleiche sucht (aus welchem grund auch immer), wird vermutlich auch diesem vergleich finden und bestimmt nicht den kompletten code lesen. er wird sich die ergebnisse ansehen und sich versuchen ein bild daraus zu machen. daher ist dieser beitrag in meinen augen schon als beratung zu sehen.

UNd genau deswegen hab ich an erster stell ins dokument geschrieben

Dieses Dokument erhebt nicht den
Anspruch eine solche umfassende Analyse zu bieten, es handelt sich nur um eine Analyse
die im Rahmen einer Entscheidungsfindung entstand.

24.08.2008 - 13:02 Uhr

Da bin ich erlich gesagt noch am testen. Die aktion mit der Datenbank als Static war eine "Quick&Dirty". Danke dennoch für den link 🙂

24.08.2008 - 12:02 Uhr

dann hast du noch immer nciht verstanden, das du das nicht machen musst. man benutzt schon mit der zeile "new Connection" in .net gues und bewährtes connectionpooling. das muss man in keiner zeile selber machen.

Korrekt. Jetzt muss ich mal fragen (hier fehlt mir schlicht die erfahrung) was ist recourcenhunriger. Innerhalb einer Foreachschleife, jedes mal ne Connection neu zu erzeugen oder MARS zu nutzen. Unter der gesichtspunkt, dass ich nicht den Datanbank zugriff paralelisieren will, sondern nur die Verarbeitung der gelesenen daten (wenn sie mal über den DataReader/Adapter gelesen wurden) will?

hm. du hast den garbagecollector noch nciht ganz verstanden.
glaube mir. es macht einen unterschied wie du die objekte handlest.

Ähm was willst du mir damit sagen? Ein Konkretes beispiel, so kann ich nur orakeln.

da der php code laut vorgabe bereits im produktivem einsatz war nehme ich doch stark an das die wissensbasis beim php programmieren größer war als die beim asp.net entwickeln.

Lies den Text nochmal. Ja das PHP system ist im Einsatz. Ja es wurde optimiert. Nein das betrifft nicht diese Codezeilen. Diese Codezeilen sind 4 einfache Foreach/While schleifen, die 4 1-n Beziehungen auflösen. Durch den einsatzt von Cache-Tabellen und Cache-Files wurde "optimiert" und so die Zugriffszeiten gedrückt.

nun. das ergebniss muss nicht bei anderer implementierung abweichen.

Nenn mir bitte mal eine konkrete andere implementierung um eine 4* 1-n auszulesen.

gerade für leute, die noch nciht wissen was sie nehmen sollen, ist es ncihts, da eine fehlerbehaftete beratung in meinen augen schlechter ist als garkeine beratung.

noch seh ich zwar nicht wo ich beratend tätig gewesen. Ich sage weder welche Technik eingesetzt werden soll noch sonst etwas. Ich sage nur was ich eingesetzt habe und was für zeiten bei rauskommen

23.08.2008 - 22:06 Uhr

brrr... StopWatch.... das nimmt man für performancetests.

liest du was ich schreibe? welche sinn hätte stoppwatch gemacht. time() unter php lliefert mir die ergenisse nur in Sekunden(!) DateTime.Now in MS. Der fehler in diesem vergleich liegt in der PHP Funktion, weil sie im fehlerfall +/- Sekunde daneben liegt. Da kann mit die ungenauigkeit von +/- einer MS bei .NET mal gerade egal sein.

falsch bleibt falsch. egal ob das ins ergebniss einfließt. das problem ist, das du somit speicher frisst und das der garbagecollector irgendwann in tests unnötigerweise angeworfen wird, was das ergebniss beeinträchtigt.

ähm wenn du mir sagst wo ich unützt große elemente anlege, die Treffermänge von flights ändert sich ständig... um zu verhindern das irgendein caching optimierend eingreift.
ok ich hätte die variablendeklaration und den command/sqladapter außerhalb der schleife anlegen können ...

die umsetztung ist vom ablauf her 1:1. mehr angleichen ist fast nicht mehr möglich und das ist in meinen augen falsch.

auf php seite wurde bereits optimiert programmiert. warum nicht auf asp seite?

nenn mir eine zeile code die in PHP bei der verarbeitung für "optimiert" wurde.
das auslesen erfolgt in der art und weise wie ich die daten brauche um sie zum clienten zu bringen. oder anders gefragt für würdest du eine 5 * 1 zu N besser auflösen bzw optimieren

aber ein kleiner Tipp: zeil des testes 1 war die direkte vergleichbarkeit der laufzeiten und die macht nur sinn wenn beide produkte das gleiche ergebniss liefern

das was du willst hab ich im dritten Diagramm gemacht, weil es sich da anbot. Blos wie aussagekräftig ist so ein Vergleich?

nun. in .net ist connectionpooling bereits integriert und du hast es sogar genutzt ohne es zu wissen.

do not use mars....

ich weiß es schon, ich weiß auch das MARS nur in ganz bestimmten konstelation vorteile bringt ansonsten nachteile. ich war blos zu faul für einen test ala "lass mal schauen was da geht" ein kommplettes Connectionpooling aufzubauen... zumal sich mir der sinn nicht erschließt. 2 Kerne - einer für die .Net anwendung einer für die SQL server. wenn ich den anspruch eines proffesionellen, perfekten und allumfassenden .NET test gewollt hätte, hätt ich geld dafür verlangt 😁

für leute wie dich ist der bericht nichts, da du weit genug in der matarie drinn bist, eher für leute die noch überlegen ob sie .NET auch im privaten nutzen wollen und vorher wissen wollen, ob es sich lohnt

23.08.2008 - 21:08 Uhr

Nein der Test lief bei mir auf dem im Dokument angegeben system
die endgülige anwendung wird auf ein gehosten Server laufen der in einer VM steckt, deswegen habe ich auf die volle auflösung mittels eines externen Testers verzichtet, gerade weil am ende die sache in einer VM läuft, für mich waren nur die Größenfaktoren interessant

zu Mono und mod_aspdotnet: deswegen schrieb ich "momentan", hätte noch eine Footnote drann gemust das ich die aussage auf 3.5 bezogen habe...

23.08.2008 - 20:02 Uhr

wenn datetime der ungenauste perfomance tester ist, was ist dann time unter php für dich 😉 oder anders gesagt, was nützt es mir wenn ich einen test fahre und externe testtools nutzte und das ganze am ende in einer gebremsten VM Läuft.?ähm entweder hast du grafiken falsch interpretiert oder ich versteh deine aussage nicht.

  1. zeigen die test das .NET schneller ist
  2. warum erzeuge ich die graßen elemente in der schleife, weil ich es kann und es für die Zeitmessung keine Rolle spielt. die äußere For-Schleife baut nur die zu lesenden FlightIDs auf....

die umsetztung ist nicht ein zu eins😉 das eine ist Objectorientiert und das andere Prozedual. Die Randbedingungen wie die Datenhaltung/Basisdaten aussehen und wie die Daten zum user kommen (XML) beschränken hingegen die möglichkeiten... wobei ich bei der Datenhaltung wenig optimierungsmöglichkeiten sehe

edit: zum thema mars. Ich hab es in diesem zusammenhang nur genutzt um mir zu ersparren ein Connection Pooling zu integrieren. Das Zielsystem verfügt momentan über einen singlecore, da werd ich mich hüten irgendwas paraleles einzubauen, das währe verschwendung. Das mit dem Parallel.Forech war eher ein test meinerseits und ich war positiv überascht. Ich hatte erwartet, dass die paralaele ausführung erst ab 250-500 Flights schneller ist...

23.08.2008 - 18:30 Uhr

Bevor jetzt der Flamewar losgeht bitte ich alle beteiligten erst das Dokument im Anhang zu lesen 😉.

Eins Vorweg, ich hab wenig brauchbares im Deutschprachigen (auch im englisch sprachigen) Raum gefunden, wenn es um die Frage geht: PHP oder ASP.NET. Viele Quellen Orakeln oder geben diffuse Aussagen.

Da ich gerade vor einer solchen Entscheidung (im Privaten Sektor stehe) habe ich für alle den es Ähnlich geht mal ein kleines Dokument verfasst, was meine Beobachtungen/Ergebnisse schildert.

Wer Fragen hat oder sich beschweren will poste hier 8)

10.06.2008 - 19:05 Uhr

hmmmm 🤔

dann teste ich es mal außerhalb der VM

10.06.2008 - 13:08 Uhr

Ich steh gerade ziehmlich auf dem schlauch.

Ich versuche ein benutzerdefiniertes Steuerelement zu erzeugen.


public partial class ReadTelegrammForm : UserControl
    {
        public ReadTelegrammForm()
        {
            InitializeComponent();
            BackgroundImage = IconLibrary.Image_Background;
        }
    }

wenn das ganze dargestellt wird, wird einfach nur die hintergrundfarbe angezeigt und nciht das bild.

Image_Background ist eine valides images und kann auf Buttons etc als background genutzt werden.

nur bei Panel und UserControl will es irgendwie nicht und ich steh auf dem schlauch warum es nicht funktioniert.

jemand nen hinweis?

04.06.2008 - 12:56 Uhr
  1. das ist offtopic und in diesem fall völlig egal, wenn der kontrolierende Thread abrauscht (aus welchen grund auch imm) wird die eventList nicht mehr befühlt. Der Thread läuft in Monitor.Wait und schläft tief und fest.
    Zudem existiert der ganze Thread im Programm nur einmal (er ist in einer Static ungebung gekapselt). das einzige was passieren kann ist, dass das programm abschmiert, damit ist auch der thread tod
04.06.2008 - 12:35 Uhr
  1. das sind keine endlosschleifen, die schleifen werden von außen beendet. Der Arbeitstread sollte vom sendethread entkoppelt sein
  2. den stacktrace werd ich mir mal anschauen
  3. das problem mit dem debugger ist, das problem braucht stunden um zu fliegen... mal sehen was ich da machen kann
04.06.2008 - 10:48 Uhr

zeig mal den erstellten code der probleme macht

bei mir geht das ohne probleme


 [DataContract(Name = "GenerateTelegramm", Namespace = "TestEnvironment.Testing.TestModules")]
    public class GenerateTelegramm:ITestModul
    {
        [DataMember(Name = "copyParametersByTelegramm")]
        private Dictionary<String, String> copyParametersFromTelegramm;
        [DataMember(Name = "CopyParametersFromVariables")]
        private Dictionary<String, String> copyParametersFromVariables;
        [DataMember(Name = "CopyParametersFromDefault")]
        private Dictionary<String, String> copyParametersFromDefault;
        [DataMember(Name = "Telegramm")]
        private Telegramm telegramm;

        public GenerateTelegramm()
        {
            copyParametersFromTelegramm = new Dictionary<string, string>();
            copyParametersFromVariables = new Dictionary<string, string>();
            copyParametersFromDefault   = new Dictionary<string, string>();
        }
        public Dictionary<String, String> CopyParametersFromTelegramm
        {
            get { return copyParametersFromTelegramm; }
        }
        public Dictionary<String, String> CopyParametersFromVariables
        {
            get { return copyParametersFromVariables; }
        }
        public Dictionary<String, String> CopyParametersFromDefault
        {
            get { return copyParametersFromDefault; }
        }

        public Telegramm Telegramm
        {
            get { return telegramm; }
            set { telegramm = value; }
        }

    }
04.06.2008 - 10:30 Uhr

Sehr geehrte CSharp gemeinde, heir hab ich ein Problem was mich schier in den wahnsinn treibt.

Das ist die Problemstelle:


private void SendLogs()
        {
            while (enabled)
            {
                //Thread von der CPU nehmen bis er geweckt wird...
                lock (eventList)
                {
                    Monitor.Wait(eventList);
                }
                //solange Logs in der liste sind senden...
                while (enabled&&eventList.Count > 0)
                {
                    try
                    {
                        loggingService.WriteLog(eventList[0]); //loggingService ist ein entferntes Objekt
                        eventList.RemoveAt(0);
                    }
                    catch(Exception exception)
                    {
                        streamWriter.WriteLine("----Neue Exceptopion----");
                        streamWriter.WriteLine(DateTime.Now);
                        while (exception != null)
                        {
                            streamWriter.WriteLine("Type:" + exception.GetType());
                            streamWriter.WriteLine("Source:" + exception.Source);
                            streamWriter.WriteLine("Message:" + exception.Message);
                            exception = exception.InnerException;
                        }
                        CheckAndRestart();
                    }
                }
            }
            streamWriter.WriteLine("LogConnection herrungter gefahren um: "+DateTime.Now);
            streamWriter.Close();
        }

der Thread rennt ohne probleme Stunden, Tage (maximum liegt bei 8 Tagen).
Die Laufzeit ist aber abhängig von der "Frequentierung" mit Logs. Also wie oft LogEvents an den Server gesendet werden.
Nach einer gewissen anzahl verschwindet das Objekt und ich bekomme ein NullPointerException. Der Witz daran ist, ich kann die verbindung auch nicht wieder hochziehen.


loggingService = (PipeService) Activator.GetObject(typeof(PipeService), strUrlClient);

Das schlägt fehl (zeitunabhängig) erst wenn ich die komplette application neustarte kann diese sich wieder auf das entfernte objekt verbinden und munter weiterloggen, bis zum nächsten absturz.

Ist dieser fehler systembedingt oder bin ich blind und über einen anfängerfehler gestolpert

auf serverseite wird das ganze so initialisiert:


BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
                    serverProvider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;

                    System.Collections.IDictionary props = new System.Collections.Hashtable();
                    props["portName"] = pipeName;
                    props["typeFilterLevel"] = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
                    if (userGroup != null && !userGroup.Equals("")) props["authorizedGroup"] = userGroup;
                    ipcChannel = new IpcChannel(props, null, serverProvider);
                    ChannelServices.RegisterChannel(ipcChannel, false);
          RemotingConfiguration.RegisterWellKnownServiceType(typeof(PipeService), SERVER_APPLICATION_NAME, WellKnownObjectMode.SingleCall);

das LifetimeObject spielt zwar keine rolle, wurde aber auf "unendlich Leben" gestellt allerdings erzeugte auch ein test mit 10ms Lebenszeit die gleichen laufzeiten samt crash

02.02.2008 - 12:37 Uhr

wie ist eigendlich unter .Net remoting das aufheben eines Registrierten Client Type möglich...

ich will mich mit einer Anwenung auf verschiedene Server connecten die den gleichen dienst haben und wenn es geht ohne die Applikation vorher x mal neu starten zu müssen....

auch ein automatischer reconnect bei einem verbindunsabbruch sollte möglich sein. Dazu muss ich die entsprechende Klasse aber wieder freigeben und neu "Registriene" können

wohlgemerkt ich befinde mich hier auf der clientseite!

31.01.2008 - 10:04 Uhr

ich sag dann mal danke 🙂

30.01.2008 - 22:59 Uhr

Hallo

ich hab mich schon durch Google MSDN und dieses Forum gewühlt, bin aber nicht wirklich fündig geworden.

Ich hab folgendes Problem.

Die Application ist ein Server, der als LogServer dienen soll. Er macht sowohl eine Pipe als auch einen TCP Port auf. Die Clients bekommen von mir eine Assembly in der die ClientClasses zum Connecten sind. Es reicht dann nen 3 Zeiler um einen remote Logger schwarf zu machen....

die Application funktionert. jetzt kommen natürlich die feinen kleinen wünsche...

Und zwar folgendes:
wenn sich ein Client nicht über die Pipe sondern über den TCP Channel verbindet würde ich gern "automatisch" die IP ermitteln...

bis jetzt mach ich es so der der Client (in meiner Connect -Methode) die IP ermittelt und an der Server sendet. Das ist weder schön noch besonders sicher ^^
irgendwie fehlt der von Java liebgewordene (und in WebApps bekannte) ConnectionContext wo ich aus allerhand ClientInfos was erahnen kann...

falls jemand zu dieser Frage eine idee hat (ein wink wo ich suchen soll würde reichen) wäre ich dankbar...