Hi,
soweit ist mir das bewusst und wird auch aktiv genutzt.
Die spannende Frage: Wie werte ich diese Kommentare über mehrere Repositories hinweg aus, ohne zu jedem zu switchen, es zu kompilieren und die Warnungen und Kommentare zu kopieren?
Alternativ käme auch ein Tool in Frage falls da jemand etwas weiß.
Moin Moin,
Ich suche nach einer Lösung für die folgende Problemstellung:
In einem Team von mehreren Entwicklern wird eine Vielzahl von Programmen gewartet und erweitert. Oft trifft man bei der Erweiterung auf Codeteile die man:
a) heute so nicht mehr schreiben würde (Performance, neuere Richtlinen, Sicherheit)
und
b) für problematisch in Anbetracht zukünftiger Erweiterung hält (Monolithen, Abstraktion, Missachtung von Richtlinien).
Der einfachste Weg diese zu kennzeichnen ist eine Warnung (#warning) oder ein Tag (Hack, ToDo, etc.) via Visual Studio zu platzieren.
Jetzt möchte ich aber natürlich alle platzierten Warnungen aus allen Repositories (Verwaltung via SVN / Tortoise) laden und in eine Übersicht packen.
Ein BugTracking System wäre natürlich eine Option. Allerdings ist der Komfort den Code direkt an Ort und Stelle zu markieren schon ein Kriterium das ich ungern aufgeben möchte.
Hat hierzu jemand eine Idee bzw. wie bewerkstelligt ihr das Zusammentragen solcher Codestellen?
Gruß aus Hamburg
Die Änderung habe ich die Web.Config geschrieben, einen neuen Release gemacht, den IIS neugestartet.
Der Fehler kommt (unverändert) weiterhin.
Kann das vielleicht auch am client-seitigen ServiceChannel liegen?
Der Service läuft in einem IIS (7) und gibt Code 443 zurück.
Hallo Community
In einem (ersten) WCF - Projekt stoße ich gerade an ein Problem zu dem mir keine Konfigurationen oder Web-Artikel weiterhelfen.
Das Versenden von Dateien größer > (ca.) 10 KB schlägt fehl -> (Request Entity too large).
Der Service wird Client-seitig wie folgt angesprochen:
var binding = new BasicHttpBinding { MaxReceivedMessageSize = 2147483647, MaxBufferSize = 2147483647 };
binding.ReceiveTimeout = new System.TimeSpan(0, 10, 0);
binding.SendTimeout = new System.TimeSpan(0, 10, 0);
binding.ReaderQuotas.MaxDepth = 2147483647;
binding.ReaderQuotas.MaxStringContentLength = 2147483647;
binding.ReaderQuotas.MaxArrayLength = 2147483647;
binding.ReaderQuotas.MaxBytesPerRead = 2147483647;
binding.ReaderQuotas.MaxNameTableCharCount = 2147483647;
[...]
foreach (OperationDescription op in myChannelFactory.Endpoint.Contract.Operations)
{
var dataContractBehavior = op.Behaviors.Find<DataContractSerializerOperationBehavior>;();
if (dataContractBehavior != null)
dataContractBehavior.MaxItemsInObjectGraph = int.MaxValue;
}
}
Die Web-Config sieht wie folgt aus:
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="myService">
<endpoint address="http://myService.svc"
binding="basicHttpBinding"
bindingConfiguration="defaultBinding" />
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="defaultBinding" sendTimeout="1:0:0" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" >
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
An welchen Stellen kann man noch einhaken um dem Problem auf den Grund zu gehen?
Gruß aus dem Norden
Hallo,
ich bin passionierter Brettspieler und stand schon häufig vor dem Problem Mitspieler zufinden, gerade in Bezug auf etwas ausufernde Spiele wie Arkham Horror, Descent und dergleichen.
Es gibt leider wenige, gute Anlaufstellen die eine entsprechde Frequenz haben.
Einige Wenige Portale im Netz bieten entweder nur regionale Abdeckung oder aber werden nach der Einstellung von inseraten Vergessen.
Das hier vorgestellte Projekt halte ich für gut und ambitioniert.
Entsprechend hoffe ich das der Atem lang genug ist um hier eine gute Plattform zu schaffen.
Ableiten lässt sich aber nicht, ob das Visual Studio 2010 Service Pack installiert ist 😃
Moin
Welche Entwicklungsumgebung wird in diesem Fall verwendet? Ein ähnliches Problem gab es einmal bei einem Kollegen.
Ein Visual Studio Service Pack hat dann das problem gelöst.
Hallo
Bei uns ist aktuell auch primär WinForms im Einsatz und die Pläne für einen Einstieg in die WPF Welt waren zumindest schon gefasst.
Allerdings sind wir darüber ins grübeln geraten, da auf der .NET DevCon eine Session speziell dieses Thema aufgriff.
Zusammenfassend blieb übrig das jedes System seine Lebensberechtigung hat, im grunde aber HTML5 das obere Ende der Nahrungskette sei, gemünzt auf unseren Kontext.
Hallo,
ich persönlich würde bevorzugen die Instanz erst garnicht zu erzeugen / anzuzeigen wenn die Prüfung fehlschlägt. Besteht diese Möglichkeit in dem Fall?
Zum einen würde sich das Ausgangsproblem eleminieren und zum anderen werden keine Ressourcen verbraucht.
Grüße,
fod
Da gefallen mir die anderen Lösungsvorschläge aber deutlich besser.
Sich erst mit einer Anleitung beschäftigen und ggf. ein Plugin installieren für etwas Copy & Paste ist nicht intuitiv wie ich finde.
Danke für die schnelle Änderung. Je weiter ich damit herumprobiere, dest beser gefällt es mir.
Wenn mir noch etwas auffallen sollte melde ich mich natürlich.
Grüße,
fod
Edit:
Nach dem Update bin ich gerade über etwas gestolpert. Jetzt wird ja der Monat eingeblendet, wenn es innerhalb des dargestellten Zeitraums einen Wechsel gibt. Allerdings steht der meist auf dem falschen Tag.
Im BIld sieht man hoffentlich was ich meine. Nimmt man ein anderes Startdatum (Beispiel 22.04.2011) steht 'Mai' auf dem 27. April.
Moin Moin,
erst einmal vielen Dank für die BEreitstellung des Controls; Gefällt mir sehr gut.
Ich probiere gerade ein wenig damit rum um festzustellen ob ich es in einem Projekt verwenden kann.
Ich bin dabei über etwas gestolpert, dass aber eventuell auch an falscher Bedienung liegen kann daher meine kurze Schilderung.
Wenn ich die StartDate-Property verändere, stimmen mitunter die Angaben nicht mehr, da der erste Tag immer auf den Montag gelegt wird.
Als Beispiel habe ich das StartDate auf den 01.06.2011 gelegt. Zur Verdeutlichung habe ich einen Screenshot beigefügt.
Gibt es hierfür eine "integrierte" Lösung? Andernfalls würde ich versuchen die Auflistung des Date - Properties selbst aufzubauen.
Schöne Grüße,
fod
Hallo normen,
erst einmal vielen Dank für die doch recht ausführliche Antwort.
Ich habe mir natürlich das von dir erwähnte Fahrtenbuch auch direkt mal angeschaut und würde mir wünschen bereits an dieser Stelle der Entwicklung zu sein 😃
Da, wie ich finde, deine App vom Prinzip her alle Elemente beinhaltet die auch für mich spannend sind
(
würde ich gern tiefer in die Materie eintauchen und da auch weiter nachbohren wenn es dich nicht stört.
Wie hostest du denn die Web Services? Und wie sieht es mit der Strukturierung innerhalb des WCF Projektes auch. Kann ich hier wie gewohnt meine Kapselung über mehrere Ebenen fahren?
Hast du auch noch andere WP7 Projekte?
Grüße,
fod
P.S.: Die Anforderungen an die App um die Freigabe zu erlangen sind denke ich ab dem Mango Update etwas überholt wenn man reine B2B Apps (was unsere ja definitiv ist und zwar nur inhouse) veröffentlichen möchte.
Hallo,
du kannst für jede einzelne Spalte den Typ seperat festlegen.
Das DataGridView ist wirklich angenehm einfach zu benutzen und sehr flexibel 😃
Gruß,
fod
Hallo zusammen,
aktuell planen wir ein neues Projekt umzusetzen. Da wir hier absolutes Neuland betreten wollte ich vor der "Grundsteinlegung" einmal andere Gedanken einholen.
Es geht um die mobile Anbindung von Mitarbeitern im Außendienst. Hierbei sollen die Mitarbeiter Zugriff auf Informationen haben und selbst auch Bereichte, Notizen u.ä, verfassen können.
Aktuell haben wir ein solches System bereits im Einsatz, welches allerdings nicht mehr den Anforderungen entspricht und auch nahezu nicht mehr wart- und erweiterbar ist.
Das bisher eingesetzte System (angehängte Grafik) ist ausgerichtet auf BlackBerry - Geräte die via Enterprise Aktivierung im Netzwerk registriert sind und auf eine ASP.NET Seite zugreifen.
Schon kurz nach dem Release der Windows Phone 7 Geräte haben wir die ersten Testspielereien veranstaltet, ich denke ihr kennt das.
Nun würden wir gern die Entwicklung voran treiben. Allerdings fangen hier die Fragen an:
Das reflektiert natürlich nur einen Bruchteil der Fragen, aber alles andere würde die "Starthilfe" Formulierung sprengen.
Schöne Grüße,
fod
P.S.: Sollte ich relevante Infos ausgelassen haben war das keine Absicht und reiche ich gerne nach.
In Win32_VideoController gibt es allerdings die Information "ProtocolSupported" und kann unter anderem PCI, AGP und tausend andere Dinge zurück kommen. Kannst du es eventuell damit herleiten?
Die Verwendung und Kompatibilität der Express Versionen ist von Microsoft doch explizit gewünscht 😃
Eventuell fehlt eine Komponente, aber das funktioniert grundsätzlich.
Und selbst wenn nicht, besteht immernoch die Möglichkeit eine Verbindungsklasse zu programmieren die dich mit dem SQL Server (und auch allen anderen Datenquellen) verbinden kann.
Moin Moin
in den WMI - Klassen gibt es "Video and Monitor Classes". Ist dort nichts zu finden?
Was spricht dagegen mit dem SQL Express 2008 zu kommunizieren asu der Visual Studio Express Edition heraus?
Edit:
Grundsätzlich zum Thema.
Wenn mehrere Personen auf eine Datei Zugreifen wollen, führt das unweigerlich zu Problemen.
Allein der Fall das nur 2 Personen etwas speichern wollen.
Eine relationale Datenbank bietet sich hier, sowie in den meisten Anwendungsszenarien, sehr gut an meiner Meinung nach.
In einer Dot Net Pro Ausgabe gab es mal einen langen Artikel über Objekt Datenbanken. Eventuell danach mal googlen, da kann ich leider keine Auskunft geben.
Das ist richtig.... aber wie komme ich von einer normalen DataColumn auf eine DataGridView...Column? [...]
Hilft dir auch kein einfacher Cast?
DataGridViewColumn MyDataGridViewCol = (DataGridViewColumn)MyDataTable.Rows[0][0];
Bei 200.000 Datensätze brauchst du dir keine Gedanken machen.
Das schöne ist auch. Die Leistung des SQL - Servers skaliert gut mit der verwendeten Hardware (Achtung: Nicht bei der Express - Version).
Wir haben Beispielsweise ein Rechungsarchiv und die Tabelle mit den dazugehörigen Artikel - Positionen hat (bei ~ 73 Feldern) an die 600.000 Datensätze und es gibt damit keine Probleme.
Moin,
hab ich richtig verstanden, dass nur verhindert werden soll das der Benutzer die Spalten sortiert?
Hallo,
wir haben bei uns auch eine ältere, auf *.DBF basierende ERP Software im Einsatz.
Seit über 2 Jahren entwickeln wir auf eine Lösung hin, die die alte Software ablösen kann.
Daher kann ich dich beruhigen und du kannst ein vielfaches der Datenmengen aus den DBF - Datenbanken im SQL Server ablegen ohne Performance Probleme zu haben.
Es gibt dann auch keine numierschen Überläufe mehr in dem Sinne wie bei DBF 😃
Die Tablle versiehst du mit einem DateTime - Feld und Indizes. Dabei ist es keine "rushmore" Optimierung notwendig oder ein Index auf jedes Feld.
Einziges "Manko": Wenn ein Datensatz gelöscht wird, ist er erstmal auch gelöscht und nicht erst "markiert". Aber da kann man ja auch Lösungen für entwerfen.
Gruß,
Andreas
P.S.: Mit welcher Sprache ist die *.DBF - basierende Lösung entwickelt? Bei uns ist es Visual FoxPro 9
Hilfreich wäre in diesem Fall:
a) der Code der dafür zuständig ist die Daten vom SQL Server zu beziehen
b) der Code, der die Daten an das DGV bzw. die BindingSource bindet.
Wenn du im debug mal das Laden durch gehst, hast du dann daten in deiner DataTable / DataSet?
Gruß,
fod
Moin,
ich hab, bis auf den subjektiven Eindruck das VS langsamer ist, keine Probleme nach dem Update auf SP1 festgestellt.
Moin Moin,
grundsätzlich kann man Daten die im SQL Server abgelegt sind auch sofort wieder abrufen und anzeigen lassen.
Gruß,
fod
Moin Moin,
bei uns gibt es Filterkaffee frei aus einer großen Tchibo - Maschine die Produrclauf 2,2L in eine Thermo - Kanne spuckt. Verwendet wird dabei absolut leckerer Davidoff Classic Kaffee.
Zudem gibts auch noch Mineralwasser mit Kohlensäure gratis.
Cola, Fanta, Multivitaminsaft kostet pro Glas 25 Cent.
Mein Verbrauch liegt im Schnitt so bei 3 - 5 Kaffeepötten und je nach Bedarf und selbstmitgebrachtem so bei 1 - 2 Gläsern Wasser / Softgetränk am Tag.
Tolles Projekt und super nutzbar! Danke.
Frage:
Durch Modifikationen müsste das doch auch für andere Produke (Office etc.) möglich sein oder?
Alles klar, dann nehm ich den "langen" Weg und machs dafür gleich hübsch und erweiterbar.
Besten Dank und erledigt
Gruß aus Hamburg
Die Anfroderungen kam zu einem späteren Zeitpunkt hinzu und muss nun nachträglich ins Projekt eingebunden werden.
Da das Abändern "per Hand" in einem solchen Projekt sehr aufwendig wäre, wollte ich erst diesen Bereich ausleuchten.
Hallo,
innerhalb verschiedener Klassen werden in meinem Fall Rohdaten an eine Drittanbieter - Komponente nach außen weitergegeben.
Allerdings müssen jetzt je nach Ort der Instanzierung verschiedene Zusatzinformationen mit übergeben werden. Also zum Beispiel auf welchem Formular die Klasse instanziert wurde.
Ich hatte vermutet das es einen ähnlichen Weg gibt wie disen gibt:
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame = stackTrace.GetFrame(1);
MethodBase methodBase = stackFrame.GetMethod();
Moin Moin
gibt es eine Möglichkeit heraus zufinden wo eine Klasse instanziert wurde?
Besten Dank dafür.
Wie faszinierend ein paar KB Programmcode sein können 😃
Moin Moin,
das sollte ohne weiteres lösbar sein.
Schau dir mal DataTable.Merge an.
Du erstellst eine DataTable mit der gleichen Struktur wie die der CSV + dein Feld JobXY.
Dann mergst du die Tabllen einfach und alle gleich lautenden Felder + Inhalte werden zusammengeführt.
Gruß aus Hamburg
Hallo,
in dem Installationsassistenten den man zur Installation von SQL Server 2008 benötigt kann man Features nach installieren zu einer bestehenden Instanz. Eines dieser Features ist das Management Studio Express. Sollte im Menü recht leicht zu finden sein.
Wichtig ist, mit dem Management Studio Express 2008 kann man auch auf Server der Version 2005 aufrufen; umgekehrt funktioniert dies allerdings nicht.
Gruß aus Hamburg
Dafür auf jeden Fall schon einmal besten Dank. Das was ich da gerade mal überfliege zum AsyncWorker sieht ziemlich ausgereift aus. Mit dem werd ich mich bis Feierabend auseinander setzen.
Schade das meine Lösung so nicht funktioniert. In meinem Kopf erschien sie mir heut Morgen noch recht ausgereift. 😃
Gruß aus Hamburg
Hallo
Das, was "DoHeavyLoad" macht ist einzig und allein Load erzeugen 😃
Vielleicht ein etwas umständliches Beispiel. Ich brauchte etwas, dass sehr lange dauert ohne Thread.Sleep verwenden zu wollen.
Die Idee das in größeren Zeitabständen zu aktualiseren werd ich mal ausprobieren.
Ansonsten scheint dieser Weg wohl eine Sackgasse zu sein.
Moin,
also im Grunde funktioniert das einwandfrei.
Was passiert denn alles in "StatusAusgeben"?
Wenn ich das Stück Code per while-Schleife laufen lasse, während die Maus sich bewegt, schmiert das Programm ab.
Was dadurch geschieht, dass die Schleife im gleichen Thread wie die GUI läuft und diese somit blockiert.
Gerade um dieses Konstrukt zu umgehen habe ich eigentlich auf den BackgroundWorker gesetzt. In früheren Implementationen, wo der BackgroundWorker direkt auf der Form selbst sitzt, funktioniert das einwandfrei.
Moin zusammen,
ich brauch glaub ich mal einen Anstoß für mein Problem.
Das stellt sich wie folgt dar:
In der Applikation existieren etliche WinForm-Elemente. Alle basieren auf einer Basisableitung ("FormNormal") in der grundlegende Methoden und Eigenschaften definiert sind.
Mein Plan war es jetzt, eine BackgroundWorker Komponente in das Basis Formular einzubauen um für alle nötigen Vorgänge in den Ableitungen darauf zurück greifen zu können.
Hierfür habe ich die 3 Events RunWorkerCompleted, ProgressChanged und DoWork als als public virtual void definiert um diese dann in der Ableitung zu benutzen.
Um zu probieren ob das funktioniert habe ich einen Testaufbau gemacht. Problematisch wird es, wenn ich GUI Elemente (Progressbar) aktualiseren möchte. Dann friert die GUI. Nutze ich nur Do_Work ist alles i.O..
Ich denke der Code wird verdeutlichen was ich versuche hier so umständlich zu erklären.
Definiert ist der BackgroundWorker so:
private BackgroundWorker worker = new BackgroundWorker();
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.DoWork+=new DoWorkEventHandler(worker_DoWork);
worker.ProgressChanged+=new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
Code im Basis Formular
#region
public virtual void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
public virtual void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
public virtual void worker_DoWork(object sender, DoWorkEventArgs e)
{
}
public void StartBackgroundWorker()
{
worker.RunWorkerAsync();
}
public void StartBackgroundWorker(object arguments)
{
worker.RunWorkerAsync(arguments);
}
public void ReportProgress(int percentage)
{
worker.ReportProgress(percentage);
}
public void ReportProgress(int percentage, object arguments)
{
worker.ReportProgress(percentage, arguments);
}
#endregion
Code des Testaufbaus in meiner Ableitung
private void DoHeavyLoad()
{
DataTable myTable = bizArtikel.get("";);
long totalItems = myTable.Rows.Count * myTable.Columns.Count;
long currentItem = 0;
foreach (DataRow dr in myTable.Rows)
{
foreach (DataColumn dc in myTable.Columns)
{
if (!this.cancelWorker)
{
currentItem++;
this.ReportProgress(Convert.ToInt32(Math.Round(currentItem/(totalItems/100.0))));
if (dr[dc].ToString().Trim() == "";)
emptyFields.Add(dc.ColumnName);
}
else
break;
}
}
}
private void zitButton6_Click(object sender, EventArgs e)
{
this.StartBackgroundWorker();
}
public override void worker_DoWork(object sender, DoWorkEventArgs e)
{
DoHeavyLoad();
base.worker_DoWork(sender, e);
}
public override void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
zitProgressBar1.Value = e.ProgressPercentage;
}
public override void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
base.worker_RunWorkerCompleted(sender, e);
}
Ich vermute momentan das Problem darin, dass die Trennung zwischen Worker- und GUI Thread nicht sauber ist und daher die GUI hängt.
Um es zu beheben / umgehen muss ich aber erstmal verstehen warum dies so ist in diesem Fall.
Gruß aus Hamburg
Moin,
falls die Antwort etwas hilft.
Wir haben heut unsere Solution in Visual 2010 eingebunden / konvertiert. Die Solution enthält etliche Referenzen, Klasse, Projekte und um die 120 WinForms. Es gab einzig und allein eine Schwierigkeit mit einer Web Reference, ansonsten alles wunderbar gelaufen. Auch Fremdkomponenten (Controls etc.) laufen bis jetzt ohne Einschränkungen.
Gruß
Moin Moin,
Nachtrag für die, die es interessiert.
Bis jetzt sieht es so aus, als ob ich den Ansatz verfolge eine Zusatzfunkton in den "Datenbankassistenten" zu integrieren die auf alle Tables einen "ALTER INDEX" durchführt.
Das ganze gepackt in einen Backgroundworker mit ein bisschen Logging und User-Interface war doch recht schnell umgesetzt.
Den Ansatz mit SSIS hab ich relativ schnell wieder verworfen, da wir das Produkt auf kleinerer Einzelplatzbasis mit der Expressvariante anbieten / ausliefern und die Integration Services in dieser
nicht greifen.
Grüße aus Hamburg
Hi
DBCC DBREINDEX"´
ist obsolet ab SQL Server 2005 und fliegt nach 2008 raus. Nimm stattdessenALTER INDEX ALL ON FooTable REBUILD
.Du kannst einen Maintenance-Plan mit SSIS erstellen und das Packet einfach ausliefern.
Grüße
Flo
Danke für den Hinweis mit SSIS.
"ALTER INDEX" anstelle von DBREINDEX zu nehmen stand auch im Entwicklerbuch und in der msdn, ist also schon vermerkt.
Moin,
ich wälze gerade das Entwicklerbuch vom SQL Server 2005.
Das Management Studio hilft mir dabei einiges weiter. Allerdings muss ich ja ne Lösung finden die ich auch mit ausliefern kann. Bei jedem Kunden jetzt das Management Studio installieren und den Wartungsplan ist zu viel Aufwand.
Wenn ich ne Funktion im Code dafür habe, kann ich allerdings ohne Aufwand ein patch / update online stellen. Das ist mein Ziel.
Moin Moin,
ich hab gestern noch einwenig rum gestöbert und bin über viele interessante Artikel gefallen.
Das Problem hat sich fast in Luft aufgelöst, nachdem ich einen "DBCC DBREINDEX" auf die Tabelle artst durchgeführt habe.
Der Index war zu über 20% defragmentiert.
Jetzt, nach dem reindex, geht auch die erste Abfrage fast Verzögerungsfrei (< 2 Sekunden) über die Bühne (vorher > 40 Sekunden!)
Früher haben wir mit Visual FoxPro auf einer DBC / DBF Datenbank entwickelt und dort war ein regelmäßiger reorg unerläßlich für die Performance. Das dies auch für den SQL so entscheidend ist, war mir neu.
Ich denke ich werde das Material das ich zusammen getragen habe erstmal durchackern und anhand dessen die Datenbank weiter optimieren.
Ich betrachte mein Problem allerdings erstmal als gelöst und danke euch für die vielen guten Denkansätze 😃
Beste Grüße aus Hamburg
P.S.: Eine letzte Frage zum Abschluss vielleicht noch. Habt ihr in euren Applikationen, welche mit sehr vielen Daten umgehen müssen, Automatismen die eine Art Datenbankwartung anstoßen?
Also die Pläne und die Daten des Profilers muss ich morgen in Ruhe checken.
Allerdings ist das definitiv kein Netzwerkproblem, da es sich auch lokal reproduzieren lässt.
Getestet habe ich das ganze jeweils mit einem richtigen SQL Server (2005) sowie der Express Variante; daran solls also auch nicht liegen.
Ram & CPU - Auslastung halten sich eigentlich in einem vernünftigen Rahmen.
Andere "Main"-Applikationen liefen nicht bei meinen Tests.
Alle anderen Informationen dann morgen wenn ich was genaueres vorliegen habe.
Bis hierhin schonmal danke^^
Grüße
Beide Felder haben, neben etlichen anderen, einen Index.
Das Statement #2 nicht ganz optimal ist, ist bekannt.
Die Applikation wird grad im SQL-Bereich von nem Kollegen überarbeitet (Umstellen auf SQL Parameter etc. 😃)
Wenn dies nur bei diesem Statement der Fall wäre, wüsste ich wo Optimierungsspielraum ist.
Aber wie gesagt, selbst die simple Abfrage verbraucht die Zeit.
Vielleicht noch zur Info.
Die Datenbank läuft auf einem Core 2 Duo Rechner mit 3 GHz und 2 GB Ram.
Grüße
Hallo
Die Abfragen die passieren können sehen unterschiedlich aus.
Szenario 1: Kunde startet die Applikation und gibt etwas in die Artikelsuche ein
SQL-Statement:
select artst.*, (select sum(best) from lgbes where lgbes.artnr = artst.artnr) as lagerbestand from artst order by artnr
Szenario 2: Kunde startet die Applikation und scannt einen Artikel an der Kasse
SQL-Statement
select * from artst where ean = 123456789
Egal welche Abfrage der Benutzer auslöstt, das Zeitverhalten ist bei beiden Abfragen fast identisch (erste Abfrage > 40 Sekunden) und tritt nur bei Datensätzen jenseits der 30.000er Marke auf.
Grüße
Die Felder über die ich Suche sind alle indiziert. Das Problem einer Suchhistorie ist, dass ich nie weiss was als nächstes gesucht wird, es nichtmal grob abschätzen kann.
Zur Info
Es befinden sich Artikeldaten in der Datenbank und niemand weiß ja vorher mit was der Kunde zur Kasse kommt 😃