Autor Thema: Inkompetente Vollkoffer  (Gelesen 2642 mal)

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Inkompetente Vollkoffer
« am: 24.10.06 - 09:27:02 »
Ich durfte letzte Woche den Agent Code debuggen, der aus einer Kooperation eines namhaften Archiv-SW Herstellers und eines IT-Dienstleisters mit drei Buchstaben entsprungen ist. Dabei bin ich auf folgenden Code gestoßen (nur die relevanten Teile, anonymisiert):
Code
...
Dim viewXXXX As NotesView
...
Set viewXXXX = archiveDb.GetView(xxview)
...
hits = getHits(viewXXXX)

Ok, klingt ja noch nicht so schlimm. Aber irgendwie klingelten bei mir bei der Funktion "getHits" die Alarmglocken. Also hab ich mal nachgeschaut, was die Funktion denn so macht (wieder gekürzt und anonymisiert):
Code
Function getHits(view As NotesView) As Integer
	getHits = 0
	Dim docAct As NotesDocument
	
	Set docAct = view.GetFirstDocument()
	Do While Not (docAct Is Nothing)
		getHits = getHits + 1
		Set docAct = view.GetNextDocument(docAct)
	Loop
...
End Function

Und die Kollegen wundern sich, warum der Code so unperformant ist.  :'(

Und für jene, die nicht verstehen warum ich mich so echauffiere:
Das NotesView-Objekt hat eine Eigenschaft "EntryCount", welche die Anzahl der Dokumente in der View zurückliefert, da brauch ich nicht über alle Dokumente iterieren und mitzählen.  >:(

Und für den Code haben sie auch noch mächtig Kohle verlangt.  >:(
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Inkompetente Vollkoffer
« Antwort #1 am: 24.10.06 - 09:30:46 »
EntryCount  --> This property is new with Release 6.

Haben die wahrscheinlich aus kompatibilitätsgründen noch nicht umgebaut  ;D *prust*
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Inkompetente Vollkoffer
« Antwort #2 am: 24.10.06 - 09:34:04 »
LOL. Das wäre natürlich eine Erklärung, aber dann geh ich doch über das AllEntries Proprty und hol mir den Count aus der NotesViewEntryCollection, oder?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline eknori

  • @Notes Preisträger
  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Inkompetente Vollkoffer
« Antwort #3 am: 24.10.06 - 09:37:02 »
Dann läuft das aber nicht mehr unter 4.x
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Inkompetente Vollkoffer
« Antwort #4 am: 24.10.06 - 09:41:26 »
Die App wurde unter 5 aufgesetzt. Mir tut sowas einfach weh.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Glombi

  • Gast
Re: Inkompetente Vollkoffer
« Antwort #5 am: 24.10.06 - 09:55:20 »
Wenn die Ansicht kategorisiert ist, dann liefert "getHits" einen falschen Wert, denn es werden dann Dokumente mehrfach gezählt, falls das zu kategorisierende Feld Mehrfachwerte enthält. Vielleicht gibts dann unerwartete Nebeneffekte.

   Set view = db.GetView("Alles")
   Set vc = view.AllEntries
   
   Msgbox vc.count

liefert übrigens das korrekte Ergebnis für eine kategorisierte View.

Andreas

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Inkompetente Vollkoffer
« Antwort #6 am: 24.10.06 - 09:56:45 »
Nope, ist nicht kategorisiert. Die View existiert nur, dass sie durch diesen Agent abgearbeitet wird.  :(
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: Inkompetente Vollkoffer
« Antwort #7 am: 24.10.06 - 22:51:04 »
Mehr als 32767 Dokumente sind in der Ansicht wohl nicht drin, so schlimm kann das nicht sein mit der Performance.

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Inkompetente Vollkoffer
« Antwort #8 am: 25.10.06 - 00:26:50 »
Naja, Heini, aus dem hohlen Bauch sowas zu sagen ist heikel, da müsste man tatsächlich mit einem Profiler genauer hinsehen. Dazu kommt, wer sowas implementiert, hat meistens noch mehr Stellen mit fraglicher Performance drin.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Inkompetente Vollkoffer
« Antwort #9 am: 25.10.06 - 04:36:08 »
Zumindest hat er das in einer kurzen Funktion weggekappselt weshalt es auch so gut auffällt.
Für mich zeigt das, dass der Autor der Funktion irgendwie schon wußte was er tat. Vielleicht nicht in Notes.
Jeder selbstrespektierende Noob, der einen das Leben wirklich schwermacht, tut es selbstverständlich so:

Code
Sub Main
//Ein paar crasse Schleiven 

Set docAct = view.GetFirstDocument()
	Do While Not (docAct Is Nothing)
// Ein bischen sinnlose Zeugs, 
//das nix 
//mit der eigentlichen Sache in dieser Schleife zu tun hat. 

		getHits = getHits + 1
// Ein bischen sinnlose Zeugs, 
//das nix 
//mit der eigentlichen Sache in dieser Schleife zu tun hat. 

		Set docAct = view.GetNextDocument(docAct)
	Loop

Aber dafür eine Menge Geld bezahlen, dass einem als Kunde solch gravierende Dummheiten wenigstens direkt ins Auge springen, find ich auch ein bischen übertrieben.

Übrigens werden auch Profiler-Reports durch einen lange-Schleifen-lange-Funktionen Programmierstil deutlich schwerer zu lesen.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Inkompetente Vollkoffer
« Antwort #10 am: 25.10.06 - 09:21:53 »
@heini: Ich hab da mal was "gebenchmarked":

Um 4.362 Dokumente zu zählen, braucht man auf einem meiner Server (Agent lokal auf dem PC gestartet):
mit Schleife durchlaufen: 93,1992 Sek.
mit AllEntries.Count: 0,7227 Sek.
mit view.EntryCount: 0,0195 Sek.

Um 4.362 Dokumente zu zählen, braucht man direkt auf dem Server :
mit Schleife durchlaufen: 0,668 Sek.
mit AllEntries.Count: 0,3008 Sek.
mit view.EntryCount: 0 Sek.


Um 4.362 Dokumente zu zählen, braucht man auf einem PC:
mit Schleife durchlaufen: 0,5117 Sek.
mit AllEntries.Count: 0,1875 Sek.
mit view.EntryCount: 0 Sek.

Als es gibt schon Unterschiede. ;)


@Jens: Ja, deswegen schau ich auf den anderen Code gar nicht hin ;)

@Axel: Ja, ein absoluter Noob war es nicht, aber für die bezahlte Summe ist der Code ned wirklich OK. Aber daran kann ich jetzt auch nix mehr ändern.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline heini_schwammerl

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 697
  • Geschlecht: Männlich
Re: Inkompetente Vollkoffer
« Antwort #11 am: 26.10.06 - 15:12:39 »
Hallo m3,

Ich wollte eigentlich keinen Benchmark provozieren sondern nur dezent auf den Umstand hinweisen, daß man bei einem Counter mit einer Integerzahl vorsichtig sein muß.
Sonst hat man sich schnell verzählt, nämlich wenn die Ansicht mehr als 32767 Dokumente hat.
Abgesehen davon sollte man das in der Tat in dieser Form wohl nicht machen.

Offline koehlerbv

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Inkompetente Vollkoffer
« Antwort #12 am: 26.10.06 - 16:14:22 »
Die Zählung in einer Integer-Variablen ist aber nur konsequent, Heini  ;D Zumindest, wenn ich mir das Verfahren so anschaue mit seinen Konsequenzen.
@Martin, ich nehme jetzt mal an, dass man - wenn schon, denn schon - auch auf ein ordentliches ErrorHandling in der Function verzichtet hat, so dass getHits auch mal Null sein konnte (wenn ein overflow eintritt)?

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz