Announcement

Collapse
No announcement yet.

Remoting LOKAL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Remoting LOKAL

    Servus zusammen,

    ich habe gerade mit einem Client/Server/Remotingprogramm

    über TCP port so einige versuche gemacht und muss leider
    feststellen, dass bei größeren Datenmengen (~>100.000)
    dies relativ lange dauert - obwohls lokal wäre ...

    mein Problem ist:

    Beim starten meines Projekts werden einige Daten über SQL
    geladen und dann weiterverarbeitet.

    Ich möchte allerdings sowas wie ein startprojekt erstellen,
    wo die SQL-Daten EINMAL geladen werden und dies dann
    ständig läuft.

    und in meiner "EntwicklungsUmgebung" möchte ich z.B. auf
    eine Classe aus dem "Startprojekt" direkt zugreifen können.

    Muss ich da die Kaufversion von VB 2010 (die macht doch projektarbeiten möglich) ordern ?

    Besten dank für ne Hilfe
    PS: ich habe heute den ganzen Tag meine "TESTS" gemacht
    aber wenns über Remote länger dauert als gleich (wieder) direkt per sql zu laden - was bringt der spass dann *g*
    Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
    Um heute vorm PC zu sitzen!

  • #2
    Muss ich da die Kaufversion von VB 2010 (die macht doch projektarbeiten möglich) ordern ?
    Das Framework ist bei allen IDEs die gleiche. Da kommt also überall der selbe Code raus und nicht zufällig was schnelleres weil du eine teurere IDE verwendest.

    Da musst du schon anders programmierten. Da wir aber nicht wissen was du programmiert hast können wir das nicht weiter beurteilen.

    Comment


    • #3
      eigentlich ist es ganz simple:


      im "Startprojekt" die Daten laden:
      [highlight=vbnet]
      Public Sub getRemoteListe(ByRef toList As RemoteClassList, ByVal connectionString As String, Optional ByVal vonDat As Date = Nothing, Optional ByVal bisDat As Date = Nothing)

      ' getStpListReadOrderData

      Dim stpw As New Stopwatch
      stpw.Start()

      Dim queryString As String
      Dim vDt As String = vonDat.ToString("yyyy-dd-MM 00:00:00")
      vDt = "'" & vDt & "'"
      Dim bDt As String = bisDat.ToString("yyyy-dd-MM 23:59:00")
      bDt = "'" & bDt & "'"

      If vonDat <> Nothing Then

      'Dim command As New OleDb.OleDbCommand("Select * from Dax WHERE Dax.DatZeit < #01/01/2009#", connection)

      queryString = "SELECT * FROM Min1 WHERE Min1.DatZeit >=" & vDt & " AND Min1.DatZeit <=" & bDt & ";"
      'BETWEEN #09/30/2009# AND #10/10/2009#
      Else
      queryString = "SELECT * FROM Min1;"
      End If

      'Dim toList As New StockPointList


      Using connection As New SqlConnection(connectionString)
      Dim command As New SqlCommand(queryString, connection)
      Try
      connection.Open()
      Console.WriteLine("con OPEN")
      Catch ex As Exception
      MsgBox("Sub cmdGetDateTime_Click" & ControlChars.CrLf & ex.Message)
      End Try

      Dim reader As SqlDataReader = command.ExecuteReader()
      Dim counter As Integer = 0
      ' Call Read before accessing data.
      While reader.Read()

      Dim pt As New RemoteClass
      Dim Datum As Date = reader("DatZeit")

      pt._Date = Datum.ToOADate
      pt.Erster = reader("Erster")
      pt.Hoch = reader("Hoch")
      pt.Tief = reader("Tief")
      pt.Schluss = reader("Schluss")
      pt.Vol = reader("Vol")
      pt.myCount = counter
      counter += 1
      toList.Liste.Add(pt)

      End While
      ' Call Close when done reading.
      reader.Close()
      stpw.Stop()
      Console.WriteLine("vonRemote " & toList.Liste.Count & " : Time: " & stpw.ElapsedMilliseconds)
      End Using
      RaiseEvent LibCalledClasse("Lib getStockPtLst", toList)

      End Sub
      [/highlight]

      und dieses Projekt läuft dann halt ständig und stellt - quasi - die gelesenen SQL-Daten bereit. Hat ja auch schon funktioniert, allerdings dauert die "Übertragung" per Remote länger als direkt per SQL ständig neu zu laden

      ==============
      ich bin mir schon relativ sicher - den wald vor lauter bäumen nich zu sehen:

      wenn ich in ProjektB einen verweis auf \BIN\Debug\ProjektA.exe erstelle
      kann ich doch auch die Mausposition etc. abfragen, da brauchts doch dann
      nimma viel um ein paar Classen auch freizugeben
      bin ich jetzt wieder bei REFLECTION ?
      *unschauldigschaue*
      Zuletzt editiert von Fremder; 10.11.2010, 19:36.
      Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
      Um heute vorm PC zu sitzen!

      Comment


      • #4
        nun sinds doch schon 3 tage ohne nennenswerte erfolge:

        =
        TCP-Port klappt zwar - aber halt langsamer
        Clipboard is bei größeren mengen extrem langsam
        =
        Interessant wäre allerdings obs mit > DragDrop <
        funktionieren könnte.

        Hat hierzu jemand erfahrung ? Wie gesagt zwischen 2 laufenden Programmen.
        *bettelblick*
        Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
        Um heute vorm PC zu sitzen!

        Comment


        • #5
          Sorry, kann dir nicht helfen.

          Du sprachst davon das Remoting langsam ist. Auf Nachfrage zeigst du uns dann Datenbank Code und jetzt erzählst du uns was von Drag&Drop und Clipboard. Ich weiß nicht was dein Problem ist aber wenn es dir immer noch um Remoting geht solltest du uns auch mit Information z.B den betreffenden Code zu diesem Context geben und nicht zu irgendwas anderem springen oder irgendwas anderes zeigen.

          Comment


          • #6
            re: sorry - na ja manchmal heissts halt auch "nicht gleich soviel CODE" zu schicken

            und da ich beim TCP-Protokoll/Remoting auf ein paar Classen zugreife - dachte ich dies wäre wohl zu unübersichtlich.

            aber gerne hier in versuchter Kurzform:

            Grundsätzlich bin ich mir jetzt ja ein bisserl im "klaren" wie der austausch funktioniert,
            scheinbar und wohl logischerweise MÜSSEN die daten erstmal serialisiert bzw. in BYTE()
            konvertiert sein/werden.

            [highlight=vbnet]
            ' dies war der letzte Versuch mit StreamReader / Writer
            ' Dateien senden / schreiben klappt da recht gut
            ' ============= SendServer 1 =============
            Imports System.IO
            Imports System.Net
            Imports System.Net.Sockets
            Imports System.Threading

            Module Module1

            Dim server As TcpListener
            Dim client As TcpClient
            Dim ipendpoint As IPEndPoint
            Dim list As New List(Of userlist)
            Dim t_empfaenger As Thread
            Private Structure userlist
            Dim stream_w As StreamWriter
            Dim stream_r As StreamReader
            Dim filename As String
            End Structure

            Sub Main()

            Console.Title = "File Send Server"

            ipendpoint = New IPEndPoint(Dns.GetHostEntry(Dns.GetHostName).Addre ssList(0), 8002)

            server = New TcpListener(ipendpoint)
            server.Start()

            Console.WriteLine("Server is online on " + ipendpoint.ToString)

            While True

            client = server.AcceptTcpClient

            If client.Connected = True Then

            Dim c As New userlist
            c.stream_w = New StreamWriter(client.GetStream)
            c.stream_r = New StreamReader(client.GetStream)
            list.Add(c)

            Console.WriteLine("Client has connected")

            t_empfaenger = New Thread(AddressOf empfaenger)
            t_empfaenger.Start(c)

            End If

            End While

            End Sub

            Private Sub empfaenger(ByVal con As userlist)
            Dim stp As New Stopwatch

            While True

            Try

            Dim post As String = con.stream_r.ReadLine

            If InStr(post, "client.info.") <> 0 Then

            post = Mid(post, 13)

            Dim info() As String = Split(post, ";")
            con.filename = info(0)

            Console.WriteLine("File Info:")
            Console.WriteLine(" Name: " + con.filename)
            Console.WriteLine(" Groesse: " + info(1) + "B")
            Console.WriteLine(" Type: " + info(2))
            stp.Restart()
            End If

            If InStr(post, "client.file.") <> 0 Then

            post = Mid(post, 13)

            Console.WriteLine("Erhalte Byts")

            Dim buffer() As Byte = Convert.FromBase64String(post)

            Dim reAR As Single = Convert.ToSingle(buffer)

            Console.WriteLine("Buffer Fertig " & stp.ElapsedMilliseconds & " " & buffer.Length)
            File.WriteAllBytes(My.Application.Info.DirectoryPa th + "\" + con.filename, buffer)

            stp.Stop()
            Console.WriteLine("Sende Fertig" & stp.ElapsedMilliseconds)

            End If

            Catch ex As Exception : End Try

            End While

            End Sub

            End Module

            [/highlight]

            [highlight=vbnet]
            ' und als Client
            Imports System.IO
            Imports System.Net
            Imports System.Net.Sockets

            Public Class Form1


            Dim client As TcpClient
            Dim stream_w As StreamWriter
            Dim stream_r As StreamReader

            Private Delegate Sub dAddText(ByVal text As String)


            Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

            ' hier kann man eine Datei zum senden wählen ...

            If File.Exists(TextBox1.Text) = True And client.Connected = True Then
            Button1.Enabled = False
            Button3.Enabled = False

            ListBox1.Items.Add("Sende Fileinfos")

            Dim finfo As New FileInfo(TextBox1.Text)
            stream_w.WriteLine("client.info." + finfo.Name + ";" + finfo.Length.ToString + ";" + finfo.Extension)
            stream_w.Flush()

            ListBox1.Items.Add("Sende File")

            Dim buffer() As Byte = File.ReadAllBytes(TextBox1.Text)

            stream_w.WriteLine("client.file." + Convert.ToBase64String(buffer))
            stream_w.Flush()

            ListBox1.Items.Add("Sende Fertig")

            Button1.Enabled = True
            Button3.Enabled = True
            End If

            End Sub

            end Class

            [/highlight]

            hier wollte ich dann statt auf HD zu speichern die daten "Abfangen" und direkt im speicher > haben .

            auch wenn obiges beispiel - mal wieder - leicht am "Remote" vorbeigeht, wäre eine frage für
            mich noch interessant - kann ich die geschwindigkeit z.b. dadurch erhöhen, wenn die übertragungspaket-größe einfach auf z.b. 100 x 1024 BYTE oder so gestellt wird

            fast alle beispiel zielen halt darauf ab, Textmessage oder so zu senden/empfangen

            muss jetz heim :-)
            ==========================
            Nachtrag: zum Verständnis

            Hallo Ralf,

            mir ist ja wirklich klar, im Forum klare direkte Fragen zu stellen und nicht
            nach Äpfel zu Fragen und nen Birnenbaum reinstellen.

            Dummerweise habe ich keine Ahnung wie ich nach dem Fragen soll,
            was mein ZIEL ist. Ich google und teste mir die finger wund und (fast) alles
            läuft auf TCP etc. raus - vorteilhafterweise kann ich da mittlerw. einiges nutzen .-)

            aber! TCP/PORT etc. läuft doch über die Netzwerkkarte und wenn ich
            NUR LOKAL von Programm A (net 4.0) zu Programm B (net 4.0) daten übertragen möchte,
            denke ich WARUM muss die "serialisierung" denn erst in die Netzkarte rein und wieder raus ?

            Anderes gefragt:

            Kann man unter VB.net irgendwie gewisse Classen (befüllt mit Daten ) fest im Speicher lassen ?
            Kann man 2 Projekte laufen lassen und nur eines beenden - ohne dass Projekt 2 beendet wird ?

            bitte nochmals um verständniss
            Zuletzt editiert von Fremder; 13.11.2010, 10:10.
            Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
            Um heute vorm PC zu sitzen!

            Comment


            • #7
              soferns jemanden interessiert:

              habs dann doch irgendwie hinbekommen, dass ich aus
              ProjektA "direkt" eine klasse (oder ähnliches) an ProjektB
              weitergeben kann (die meisten bremser sind/waren u.a.
              die richtige wahl der classe bzw. der datentypen
              ebenso wichtig war auch auf ByREF zu verzichten *g*)

              so haben z.B. List(of ClasseA) super schnell funktioniert
              ~ 125000 Ds ca. ~1 Sec.
              =
              allerdings müssen da halt die benutzten classen als DLL aktualisiert etc. sein,
              was mir faulen hund dann nicht so passte
              =
              deshalb "zuück zu den wurzeln" oder so und ein geiles RADMDISK.prog
              installiert (bei XP z.B. kann man damit die oberhalb 3GB-grenze nutzen:-)
              und alles programmdaten/sql-daten ab in die RD und halt per intervall saven auf die HD
              (nebenbei idel für die TEMPdaten aus dem explorer-salat)
              fuktioniert wunderbar statt üblicher ca. 13 bis 20 sekunden um ans 6 Form zu gelangen dauerts so ca. 3 bis 5 sek.

              *jubel*

              bei den RAMDISKs gibts gute bis schlechte aktuell kann ich nur jedem diese hier empfehlen:

              http://memory.dataram.com/products-and-services/software/ramdisk/
              alt:
              http://www.win-tipps-tweaks.de/cms/x...erstellen.html


              Anm:
              Für diese "erkenntniss" habe ich wohl ca. 5 Stunden (effekt.) gebraucht:

              ERGO: darf ich jetzt ca. 1.800 x mein Projekt starten um einen realen Zeitvorteil zu erhalten *g*
              Zuletzt editiert von Fremder; 28.11.2010, 17:17.
              Vor 4,5 Millionen Jahren lernten ~wir~ aufrecht zu gehen!
              Um heute vorm PC zu sitzen!

              Comment

              Working...
              X