Springen naar inhoud


- - - - -
VS 2015

Het Kan Altijd Beter

VS2015

  • Log in a.u.b. om te beantwoorden
Er zijn 12 reacties in dit onderwerp

#1 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 04 september 2016 - 20:05

geen echt probleem maar meer een vervolg op het topic "Performance"

Door de reacties ben ik aan het denken gegaan
vooral de opmerking als je het kan berekenen dan niet op slaan.

Mijn vraag is hoe kan ik onderstaande oplossing verbeteren vooral snelheid winst zou fijn zijn.
alles werkt, maar heb het idee dat het niet is zoals het hoort.

Nadat ik gegevens in heb gelezen maak ik hulptabellen met de code hieronder
vandaar uit ga ik later gegevens berekenen.

Code:
ublic Sub ClosingTasks()
		Form1.txtInfo.Text += "Start after Import Tasks|" + CDate(Now()).ToString + vbCrLf
		Try
			Using adtCon As New AdsConnection("Data Source=" + My.Resources.FilesPath + ";Advantage Server Type =" + My.Resources.AdsServerType + ";TrimTrailingSpaces=True")
				Using adtCmd = adtCon.CreateCommand
					adtCon.Open()
					adtCmd.CommandTimeout = 0

					If System.IO.File.Exists(My.Resources.FilesPath + "\PLAYER_KILLS_ALL_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE PLAYER_KILLS_ALL_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					adtCmd.CommandText = "SELECT SERVER, WORLD,PLAYER_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS,0 as ALLIANCE_ID " +
										 "INTO PLAYER_KILLS_ALL_PROGRESS " +
										 "From PLAYER_KILLS_ALL " +
										 "WHERE [DATE]=CURDATE(); " +
										 "UPDATE PLAYER_KILLS_ALL_PROGRESS " +
										 "SET POINTS_PREV=PLAYER_KILLS_ALL.POINTS " +
										 "From PLAYER_KILLS_ALL_PROGRESS " +
										 "INNER JOIN PLAYER_KILLS_ALL " +
										 "On PLAYER_KILLS_ALL.SERVER=PLAYER_KILLS_ALL_PROGRESS.SERVER " +
										 "And PLAYER_KILLS_ALL.WORLD=PLAYER_KILLS_ALL_PROGRESS.WORLD " +
										 "And PLAYER_KILLS_ALL.PLAYER_ID=PLAYER_KILLS_ALL_PROGRESS.PLAYER_ID " +
										 "AND [date]= curdate()-1; " +
										 "UPDATE PLAYER_KILLS_ALL_PROGRESS " +
										 "SET PROGRESS = POINTS-POINTS_PREV; " +
										 "UPDATE PLAYER_KILLS_ALL_PROGRESS " +
										 "SET PLAYER_KILLS_ALL_PROGRESS.ALLIANCE_ID=PLAYERS.ALLIANCE_ID " +
										 "From PLAYER_KILLS_ALL_PROGRESS " +
										 "INNER Join PLAYERS  " +
										 "On PLAYERS.PLAYER_ID=PLAYER_KILLS_ALL_PROGRESS.PLAYER_ID " +
										 "And PLAYER_KILLS_ALL_PROGRESS.SERVER=PLAYERS.SERVER " +
										 "And PLAYER_KILLS_ALL_PROGRESS.WORLD=PLAYERS.WORLD " +
										 "And PLAYERS.[DATE]=CURDATE()"
					adtCmd.ExecuteNonQuery()
					If System.IO.File.Exists(My.Resources.FilesPath + "\PLAYER_KILLS_DEF_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE PLAYER_KILLS_DEF_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					adtCmd.CommandText = "SELECT SERVER, WORLD,PLAYER_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS,0 as ALLIANCE_ID " +
										 "INTO PLAYER_KILLS_DEF_PROGRESS " +
										 "From PLAYER_KILLS_DEF " +
										 "WHERE [DATE]=CURDATE(); " +
										 "UPDATE PLAYER_KILLS_DEF_PROGRESS " +
										 "SET POINTS_PREV=PLAYER_KILLS_DEF.POINTS " +
										 "From PLAYER_KILLS_DEF_PROGRESS " +
										 "INNER JOIN PLAYER_KILLS_DEF " +
										 "On PLAYER_KILLS_DEF.SERVER=PLAYER_KILLS_DEF_PROGRESS.SERVER " +
										 "And PLAYER_KILLS_DEF.WORLD=PLAYER_KILLS_DEF_PROGRESS.WORLD " +
										 "And PLAYER_KILLS_DEF.PLAYER_ID=PLAYER_KILLS_DEF_PROGRESS.PLAYER_ID " +
										 "AND [date]= curdate()-1; " +
										 "UPDATE PLAYER_KILLS_DEF_PROGRESS " +
										 "SET PROGRESS = POINTS-POINTS_PREV; " +
										 "UPDATE PLAYER_KILLS_DEF_PROGRESS " +
										 "SET PLAYER_KILLS_DEF_PROGRESS.ALLIANCE_ID=PLAYERS.ALLIANCE_ID " +
										 "From PLAYER_KILLS_DEF_PROGRESS " +
										 "INNER Join PLAYERS  " +
										 "On PLAYERS.PLAYER_ID=PLAYER_KILLS_DEF_PROGRESS.PLAYER_ID " +
										 "And PLAYER_KILLS_DEF_PROGRESS.SERVER=PLAYERS.SERVER " +
										 "And PLAYER_KILLS_DEF_PROGRESS.WORLD=PLAYERS.WORLD " +
										 "And PLAYERS.[DATE]=CURDATE()"
					adtCmd.ExecuteNonQuery()
					If System.IO.File.Exists(My.Resources.FilesPath + "\PLAYER_KILLS_ATT_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE PLAYER_KILLS_ATT_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					adtCmd.CommandText = "SELECT SERVER, WORLD,PLAYER_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS,0 as ALLIANCE_ID " +
										 "INTO PLAYER_KILLS_ATT_PROGRESS " +
										 "From PLAYER_KILLS_ATT " +
										 "WHERE [DATE]=CURDATE(); " +
										 "UPDATE PLAYER_KILLS_ATT_PROGRESS " +
										 "SET POINTS_PREV=PLAYER_KILLS_ATT.POINTS " +
										 "From PLAYER_KILLS_ATT_PROGRESS " +
										 "INNER JOIN PLAYER_KILLS_ATT " +
										 "On PLAYER_KILLS_ATT.SERVER=PLAYER_KILLS_ATT_PROGRESS.SERVER " +
										 "And PLAYER_KILLS_ATT.WORLD=PLAYER_KILLS_ATT_PROGRESS.WORLD " +
										 "And PLAYER_KILLS_ATT.PLAYER_ID=PLAYER_KILLS_ATT_PROGRESS.PLAYER_ID " +
										 "AND [date]= curdate()-1; " +
										 "UPDATE PLAYER_KILLS_ATT_PROGRESS " +
										 "SET PROGRESS = POINTS-POINTS_PREV; " +
										 "UPDATE PLAYER_KILLS_ATT_PROGRESS " +
										 "SET PLAYER_KILLS_ATT_PROGRESS.ALLIANCE_ID=PLAYERS.ALLIANCE_ID " +
										 "From PLAYER_KILLS_ATT_PROGRESS " +
										 "INNER Join PLAYERS  " +
										 "On PLAYERS.PLAYER_ID=PLAYER_KILLS_ATT_PROGRESS.PLAYER_ID " +
										 "And PLAYER_KILLS_ATT_PROGRESS.SERVER=PLAYERS.SERVER " +
										 "And PLAYER_KILLS_ATT_PROGRESS.WORLD=PLAYERS.WORLD " +
										 "And PLAYERS.[DATE]=CURDATE()"
					adtCmd.ExecuteNonQuery()
					If System.IO.File.Exists(My.Resources.FilesPath + "\ALLIANCE_KILLS_ATT_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE ALLIANCE_KILLS_ATT_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					If System.IO.File.Exists(My.Resources.FilesPath + "\ALLIANCE_KILLS_DEF_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE ALLIANCE_KILLS_DEF_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					If System.IO.File.Exists(My.Resources.FilesPath + "\ALLIANCE_KILLS_ALL_PROGRESS.adt") = True Then
						adtCmd.CommandText = "DROP TABLE ALLIANCE_KILLS_ALL_PROGRESS"
						adtCmd.ExecuteNonQuery()
					End If
					'   ALLIANCE_KILLS_ALL_PROGRESS
					adtCmd.CommandText = "SELECT SERVER,WORLD,ALLIANCE_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS " +
										 "INTO ALLIANCE_KILLS_ALL_PROGRESS " +
										 "FROM ALLIANCE_KILLS_ALL " +
										 "WHERE [DATE] = CURDATE(); " +
										  "UPDATE ALLIANCE_KILLS_ALL_PROGRESS " +
										 "SET POINTS_PREV=ALLIANCE_KILLS_ALL.POINTS " +
										 "FROM ALLIANCE_KILLS_ALL_PROGRESS " +
										 "INNER JOIN ALLIANCE_KILLS_ALL " +
										 "ON ALLIANCE_KILLS_ALL.SERVER=aLLIANCE_KILLS_ALL_PROGRESS.SERVER " +
										"AND ALLIANCE_KILLS_ALL.WORLD=aLLIANCE_KILLS_ALL_PROGRESS.WORLD " +
										"AND ALLIANCE_KILLS_ALL.ALLIANCE_ID=aLLIANCE_KILLS_ALL_PROGRESS.ALLIANCE_ID " +
										"AND [DATE] = CURDATE()-1; " +
										"UPDATE ALLIANCE_KILLS_ALL_PROGRESS " +
										"SET PROGRESS=POINTS-POINTS_PREV; " +
										"SELECT SERVER,WORLD,ALLIANCE_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS " +
										"INTO ALLIANCE_KILLS_ATT_PROGRESS " +
										"FROM ALLIANCE_KILLS_ATT " +
										"WHERE [DATE] = CURDATE(); " +
										"UPDATE ALLIANCE_KILLS_ATT_PROGRESS " +
										"SET POINTS_PREV=ALLIANCE_KILLS_ATT.POINTS " +
										"FROM ALLIANCE_KILLS_ATT_PROGRESS " +
										"INNER JOIN ALLIANCE_KILLS_ATT " +
										"ON ALLIANCE_KILLS_ATT.SERVER=aLLIANCE_KILLS_ATT_PROGRESS.SERVER " +
										"AND ALLIANCE_KILLS_ATT.WORLD=aLLIANCE_KILLS_ATT_PROGRESS.WORLD " +
										"AND ALLIANCE_KILLS_ATT.ALLIANCE_ID=aLLIANCE_KILLS_ATT_PROGRESS.ALLIANCE_ID " +
										"AND [DATE] = CURDATE()-1; " +
										"UPDATE ALLIANCE_KILLS_ATT_PROGRESS " +
										"SET PROGRESS=POINTS-POINTS_PREV; " +
										"SELECT SERVER,WORLD,ALLIANCE_ID,POINTS,0 AS POINTS_PREV,0 AS PROGRESS " +
										"INTO ALLIANCE_KILLS_DEF_PROGRESS " +
										"FROM ALLIANCE_KILLS_DEF " +
										"WHERE [DATE] = CURDATE(); " +
										"UPDATE ALLIANCE_KILLS_DEF_PROGRESS " +
										"SET POINTS_PREV=ALLIANCE_KILLS_DEF.POINTS " +
										"FROM ALLIANCE_KILLS_DEF_PROGRESS " +
										"INNER JOIN ALLIANCE_KILLS_DEF " +
										"ON ALLIANCE_KILLS_DEF.SERVER=aLLIANCE_KILLS_DEF_PROGRESS.SERVER " +
										"AND ALLIANCE_KILLS_DEF.WORLD=aLLIANCE_KILLS_DEF_PROGRESS.WORLD " +
										"AND ALLIANCE_KILLS_DEF.ALLIANCE_ID=aLLIANCE_KILLS_DEF_PROGRESS.ALLIANCE_ID " +
										"AND [DATE] = CURDATE()-1; " +
										"UPDATE ALLIANCE_KILLS_DEF_PROGRESS " +
										"SET PROGRESS=POINTS-POINTS_PREV "
					adtCmd.ExecuteNonQuery()

		Form1.txtInfo.Text += "Stop after Import Tasks|" + CDate(Now()).ToString + vbCrLf


	End Sub



Daarna gebruik ik deze tabellen om html bestanden aan te maken
met de code hieronder

Code:
Private Sub CreateCurrentProgressFile()
		Dim Server As String = Form1.cmbServer.Text
		Dim World As String = Form1.cmbWorld.Text
		Dim HtmlFile As String = My.Resources.HTMLPath + "WorldProgress_" + Server + "_" + World + ".html"
		Dim HTMLPath As String = My.Resources.ExportPath + "HTML"
		Dim AdsNormalReader As AdsDataReader
		Dim StreamHTML As System.IO.StreamWriter		Dim StrHTML As String = ""
		Call mdMiscFunctions.GrepoDatalog("Start Progress report" + " | " + Server + " | " + World)		StreamHTML = My.Computer.FileSystem.OpenTextFileWriter(HtmlFile, False)
		StreamHTML.WriteLine("<!DOCTYPE html><html><body bgcolor=" + Chr(34) + "#E6E6FA" + Chr(34) + ">")
		'+ mdMiscFunctions.GoogleAnalisticsHtml
		StreamHTML.WriteLine("<script>")
		StreamHTML.WriteLine("  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){")
		StreamHTML.WriteLine("  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),")
		StreamHTML.WriteLine("  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)")
		StreamHTML.WriteLine("  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');")
		StreamHTML.WriteLine("")
		StreamHTML.WriteLine("  ga('create', 'UA-75058438-1', 'auto');")
		StreamHTML.WriteLine("  ga('send', 'pageview');")
		StreamHTML.WriteLine("")
		StreamHTML.WriteLine("</script>")		StreamHTML.WriteLine("<h1>Progress Current Day " + Server.ToString + "-" + World.ToString + "</h1><p align=" + Chr(34) + "right" + Chr(34) + "> <button onclick=" + Chr(34) + "myFunction()" + Chr(34) + ">Reload page</button></p>")
		StreamHTML.WriteLine("<script>function myFunction() { location.reload(); } </script> ")
		StreamHTML.WriteLine("<table border=" + Chr(34) + "5" + Chr(34) + "style =" + Chr(34) + "width:100%" + Chr(34) + ">")
		StreamHTML.WriteLine("<tr><th>No</th><th>" + CDate(Now()).ToString + "</th><th>Attacker</th><th></th><th>Defender</th><th><th>Total Points</th><th></th></th><th>Towns Gain</th><th></th><th>Towns Losses</th></tr>")
		Using adtCon As New AdsConnection("Data Source=" + My.Resources.FilesPath + ";Advantage Server Type =" + My.Resources.AdsServerType + ";TrimTrailingSpaces=True")			Using adtCmd = adtCon.CreateCommand
				adtCon.Open()
				adtCmd.CommandTimeout = 0
				Call mdMiscFunctions.GrepoDatalog(CurrentDayStatsSqlText(Server, World))
				adtCmd.CommandText = CurrentDayStatsSqlText(Server, World)
				AdsNormalReader = adtCmd.ExecuteReader
				Dim x As Integer = 1
				While AdsNormalReader.Read					StrHTML = "<tr><td>" + x.ToString + "</td>"
					For i = 0 To AdsNormalReader.FieldCount - 1
						StrHTML += "<td>" + AdsNormalReader.GetValue(i).ToString + "</td>"					Next
					x += 1
					StrHTML += "</body></html></tr>"
					StreamHTML.WriteLine(StrHTML)
				End While
				StreamHTML.Dispose()
				AdsNormalReader.Close()
			End Using
		End Using		Call mdMiscFunctions.GrepoDatalog("Stop Progress report" + " | " + Server + " | " + World)
	End Sub



Private Function CurrentDayStatsSqlText(Server As String, world As String) As String
		Return "SELECT  top 100 PLAYERS.[NAME],PLAYER_KILLS_ATT_PROGRESS.PROGRESS AS [POINTS] " +
			   "INTO #TMPATT " +
				"From PLAYERS,PLAYER_KILLS_ATT_PROGRESS " +
				"WHERE PLAYER_KILLS_ATT_PROGRESS.PLAYER_ID=PLAYERS.PLAYER_ID " +
				"AND PLAYER_KILLS_ATT_PROGRESS.SERVER=PLAYERS.SERVER " +
				"AND PLAYER_KILLS_ATT_PROGRESS.WORLD=PLAYERS.WORLD " +
				"AND PLAYERS.SERVER ='" + Server + "' " +
				"AND PLAYERS.WORLD='" + world + "' " +
				"AND PLAYERS.[DATE]=CURDATE() " +
				"ORDER BY [POINTS] DESC; " +
				"Select ROWNUM() AS NO,TMPATT.* " +
				"INTO #TMPATT2 " +
				"FROM #TMPATT; " +
				"SELECT  top 100 PLAYERS.[NAME],PLAYER_KILLS_DEF_PROGRESS.PROGRESS AS [POINTS] " +
				"INTO #TMPDEF " +
				"From PLAYERS,PLAYER_KILLS_DEF_PROGRESS " +
				"WHERE PLAYER_KILLS_DEF_PROGRESS.PLAYER_ID=PLAYERS.PLAYER_ID " +
				"AND PLAYER_KILLS_DEF_PROGRESS.SERVER=PLAYERS.SERVER " +
				"AND PLAYER_KILLS_DEF_PROGRESS.WORLD=PLAYERS.WORLD " +
				"AND PLAYERS.SERVER ='" + Server + "' " +
				"AND PLAYERS.WORLD='" + world + "' " +
				"AND PLAYERS.[DATE]=CURDATE() " +
				"ORDER BY [POINTS] DESC; " +
				"Select ROWNUM() AS NO,TMPDEF.* " +
				"INTO #TMPDEF2 " +
				"FROM #TMPDEF; " +
				"SELECT  top 100 PLAYERS.[NAME],PLAYER_KILLS_ALL_PROGRESS.PROGRESS AS [POINTS] " +
				"INTO #TMPALL " +
				"From PLAYERS,PLAYER_KILLS_ALL_PROGRESS " +
				"WHERE PLAYER_KILLS_ALL_PROGRESS.PLAYER_ID=PLAYERS.PLAYER_ID " +
				"AND PLAYER_KILLS_ALL_PROGRESS.SERVER=PLAYERS.SERVER " +
				"AND PLAYER_KILLS_ALL_PROGRESS.WORLD=PLAYERS.WORLD " +
				"AND PLAYERS.SERVER ='" + Server + "' " +
				"AND PLAYERS.WORLD='" + world + "' " +
				"AND PLAYERS.[DATE]=CURDATE() " +
				"ORDER BY [POINTS] DESC; " +
				"Select ROWNUM() AS NO,TMPALL.* " +
				"INTO #TMPALL2 " +
				"FROM #TMPALL; " +
				"SELECT TOP 100 [PLAYERS].[NAME],COUNT(*) AS [AANTAL] " +
				"INTO #TMP1TOWN " +
				"FROM [CONQUERS] " +
				"INNER JOIN [PLAYERS] " +
				 "ON [CONQUERS].[NEW_PLAYER_ID]=[PLAYERS].[PLAYER_ID] " +
				"AND [CONQUERS].[DATE]=[PLAYERS].[DATE] " +
				"AND [CONQUERS].[SERVER]=[PLAYERS].[SERVER]" +
				"And [Conquers].[WORLD] = [Players].[WORLD] " +
				"WHERE [PLAYERS].[DATE]=CURDATE() " +
				"AND [PLAYERS].[SERVER]='" + Server + "' " +
				"AND [PLAYERS].[WORLD]='" + world + "'" +
				 "GROUP BY [PLAYERS].[NAME] " +
				 "ORDER BY [AANTAL] DESC; " +
				"SELECT ROWNUM() AS [NO],TMP1TOWN.* INTO #TMP2TOWN FROM #TMP1TOWN; " +
			   "Select TOP 100 [PLAYERS].[NAME],COUNT(*) AS [AANTAL] " +
				"INTO #TMP3TOWN " +
			   "From [CONQUERS] " +
				"INNER JOIN [PLAYERS] " +
				 "On [CONQUERS].[OLD_PLAYER_ID]=[PLAYERS].[PLAYER_ID] " +
				 "And [CONQUERS].[DATE]=[PLAYERS].[DATE] " +
				 "And [CONQUERS].[SERVER]=[PLAYERS].[SERVER] " +
				"And [CONQUERS].[WORLD]=[PLAYERS].[WORLD] " +
				"WHERE [PLAYERS].[DATE]=CURDATE() " +
				"And [PLAYERS].[SERVER]='" + Server + "' " +
				"And [PLAYERS].[WORLD]='" + world + "' " +
				"GROUP BY [PLAYERS].[NAME] " +
				"ORDER BY [AANTAL] DESC; " +
				"SELECT ROWNUM() AS [NO],TMP3TOWN.* INTO #TMP4TOWN FROM #TMP3TOWN; " +
				"SELECT TMPATT2.[NAME],[TMPATT2].[POINTS],TMPDEF2.[NAME],[TMPDEF2].[POINTS],TMPALL2.[NAME],[TMPALL2].[POINTS],TMP2TOWN.[NAME],TMP2TOWN.[AANTAL],TMP4TOWN.[NAME],TMP4TOWN.[AANTAL] " +
				"FROM #TMPATT2 " +
				"LEFT OUTER JOIN #TMPDEF2 " +
				"ON TMPATT2.NO=TMPDEF2.NO " +
				"LEFT OUTER JOIN #TMPALL2 " +
				"ON TMPATT2.NO=TMPALL2.NO " +
				"LEFT OUTER JOIN #TMP2TOWN " +
				"ON TMPATT2.NO=TMP2TOWN.NO " +
				"LEFT OUTER JOIN #TMP4TOWN " +
				"ON TMPATT2.NO=TMP4TOWN.NO "
	End Function



Een hele lap tekst ik weet het, maar ben nooit te oud om te leren

#2 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 645 berichten
    Laatst bezocht 03 dec 2018 19:54
  • LocatieMechelen (BE)

Geplaatst op 05 september 2016 - 17:21

Voor de html zou je kunnen werken met template bestanden en daar een replace in doen.

Voor de rest kun je eventueel werken met een proces timer of timers: https://social.msdn....forum=vbgeneral om te kijken of je winst kunt boeken :)

Veranderd door Damic, 05 september 2016 - 17:31.


#3 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 07 september 2016 - 14:01

Ik werk inderdaad met timers
ik ben aan het stoeien met datatables om te kijken of ik het sneller krijg

#4 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 645 berichten
    Laatst bezocht 03 dec 2018 19:54
  • LocatieMechelen (BE)

Geplaatst op 07 september 2016 - 18:24

Kun je query's parallel doen? Dan zou je async kunnen gebruiken en zit je niet te wachten :)

#5 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 07 september 2016 - 20:16

nooit mee gewerkt
ik lees het werkt zoals een tread , ik vraag me af of ik daar snelheid mee win omdat het programma op een vps draait met maar 1 core


Bijlage  1f9de4ee4d654b02a056d3dbe50bf179.png   118,9K   3 downloads

#6 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 645 berichten
    Laatst bezocht 03 dec 2018 19:54
  • LocatieMechelen (BE)

Geplaatst op 07 september 2016 - 20:24

Ja async kun je parallellen dingen mee doen zonder dat je direct moet wachten op de andere. Nu zoals je al aangeeft zal het op 1core/thread niet veel uitmaken maar je kan altijd proberen.

#7 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 10 september 2016 - 20:16

ongeveer 10% snelheid gewonnen met :

overbodige logging verwijderd
Async uitvoeren van Queries
betere functies

#8 Damic

Damic

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 645 berichten
    Laatst bezocht 03 dec 2018 19:54
  • LocatieMechelen (BE)

Geplaatst op 10 september 2016 - 20:19

10% is niet niks. De rest zit wrs in de traagheid van de server die de db runt :)

#9 RedThread

RedThread

    Beheerder VBIB

  • Beheerder
  • 3593 berichten
    Laatst bezocht 05 dec 2018 16:30
  • LocatieTongeren,Belgium.
Inzender

Geplaatst op 12 september 2016 - 13:27

Misschien ook eens overwegen om met Stored Procedures te werken, kans is groot dat je er nog wat extra % kunt uithalen.

Met SP's draai je de sql op de database zelf.
Vergt wel enig inzicht.

https://www.google.b...tored procedure

#10 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 21 september 2016 - 22:31

Bericht bekijkenRedThread, op 12 september 2016 - 13:27, zei:

Misschien ook eens overwegen om met Stored Procedures te werken, kans is groot dat je er nog wat extra % kunt uithalen.

Met SP's draai je de sql op de database zelf.
Vergt wel enig inzicht.


Ik heb er nog nooit echt mee gewerkt, wel interessant om eens in te verdiepen
Ik werk nu met free tables , maar dat omzetten naar een dictonary is niet zo spannend

#11 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 08 juni 2018 - 23:08

ben er nog mee bezig, heb enorme snelheidswinsten geboekt met jullie tips

Maar wil graag nog met jullie delen dat het regelmatig defragmenteren van grote DB ook enorme snelheidswinstoplevert.
Fragmentatie is echt een performance killer.

Zeker bij grote DB

#12 Supervos

Supervos

    Guru Developer

  • Leden
  • PipPipPipPipPipPip
  • 1397 berichten
    Laatst bezocht 28 sep 2018 08:35

Geplaatst op 10 juni 2018 - 14:46

Op welke manier bedoel je dat je database gefragmenteerd is?

Een database behoudt zijn volgorde van de data aan de hand van de clustered index (de index die de volgorde van de rijen bepaalt). Over het algemeen is dit de primary key maar niets belet je om een andere index als primary key te gebruiken. Zeker als die andere index beter de structuur van je data volgt (ook qua inserts/deletes). Bijkomend voordeel is dat je query dan niet 2 dingen moet raadplegen, 1 keer de index voor de zoekopdracht en dan die index matchen met de werkelijke data (primary key).


Iets wat ook veel helpt in een database is om je statistieken te updaten. Deze houden de verdeling van je data in een index/kolom bij en wordt gebruikt om een execution plan op te stellen. Als de statistiek echter verouderd is kan deze zorgen dat de execution engine een index negeert die eigenlijk optimaler is.

#13 Hansiebebe

Hansiebebe

    Professional Developer

  • Leden
  • PipPipPipPip
  • 328 berichten
    Laatst bezocht 25 nov 2018 22:17

Geplaatst op 10 juni 2018 - 17:07

Ik haal data op en verwerk deze elk uur
Dus de verwerking moet ook binnen een uur klaar zijn

Ik merkte dat de cyclus steeds langer duurde en over het uur heen ging

Na wat googlen heb ik de grootste db en de indexen met contig gedrafmenteerd
Daarna was er een snelheids winst van ruim 45%

Dit doe ik nu dus 2x in de week

Gaat dus om disk fragmentatie





Ook met taq VS 2015, VS2015 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2015] Untitled 1

Met dank aan J├╝rgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)