F
FredyH
Gast
Danke nochmal für die Idee mit dem Thread, damit komme ich nun auf 60 millionen Ticks die Sekunde 
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
soul0ry schrieb:Danke nochmal für die Idee mit dem Thread, damit komme ich nun auf 60 millionen Ticks die Sekunde![]()
class Program
{
static void Main(string[] args)
{
new Program
{
inputstring = "test",
}.Run();
}
String inputstring = "";
long curtime;
String curstring = " ";
char curchar;
int charint = 0;
int maxpos = 0;
int count = 0;
static long last;
class UpdateUiEventArgs : EventArgs
{
public string CurrentValue { get; set; }
}
event EventHandler UpdateUi;
public void Run()
{
UpdateUi += (sender, args) =>
{
// TODO hier Label aktualisieren mit args.CurrentValue
// myLabel.Text = ((UpdateUiEventArgs) args).CurrentValue;
};
new Thread(() =>
{
while (true)
{
UpdateUi.Invoke(this, new UpdateUiEventArgs { CurrentValue = curstring });
Thread.Sleep(100);
}
}).Start();
last = Environment.TickCount / 1000;
while (!curstring.Equals(inputstring))
{
charint++;
count++;
curchar = (char)charint;
if (count % 10000 == 0)
{
Console.WriteLine("Iterations:" + count);
Console.WriteLine("Iterations/s: " + ((float)count / ((float)curtime)));
Console.WriteLine("Time: " + ((float)curtime));
}
long newlast = Environment.TickCount / 1000; ;
long dif = newlast - last;
curtime += dif;
last = newlast;
char[] chararray = curstring.ToCharArray();
if (charint >= 255)
{
charint = 0;
int bufpos = 0;
while (bufpos < chararray.Length)
{
for (int i = 0; i < bufpos; i++)
{
chararray[bufpos] = (char)0;
}
if (bufpos == maxpos)
{
maxpos++;
char[] buffer = new char[chararray.Length + 1];
for (int i = 0; i < buffer.Length; i++)
{
buffer[i] = (char)0;
}
chararray = buffer;
}
if (chararray.Length > bufpos + 1)
{
int x = (int)chararray[bufpos + 1];
x++;
chararray[bufpos + 1] = (char)x;
if (!(x > 255))
{
break;
}
}
bufpos++;
}
}
chararray[0] = curchar;
curstring = new string(chararray);
//Console.WriteLine(curstring);
}
Console.WriteLine("Start");
}
}
public void SetText(string text, TextBox box)
{
if (box.InvokeRequired)
box.Invoke( ... );
else
box.Text = text;
}
Tja, der Teufel steckt im Detail :-) Aber ich finds sehr positiv, dass Du da direkt erkannt hast, dass hier was nicht stimmen kann. Das tun viele, auch professionelle Leute, nicht mehr.soul0ry schrieb:Stimmt, leider habe ich mich um eine Stelle verzählt (zu große Zahlen für mich), es sind nur 10 millionen, aber immer noch ein gutes Ergebnis.
Jo, kein Vorwurf, im Gegenteil. Ich sehe nur nach wie vor sehr viele Leute, auch junge, die das nicht so sehen können.soul0ry schrieb:@captmcneil:
Ich habe nie gesagt dass C# schlecht ist, ich wusste, dass es ein Fehler meinerseits sein musste (da java ja auch mit genug t/s lief).
Gerade dank dem JIT-Compiler ist es gut möglich, dass C#/Java schneller läuft als C++.
soul0ry schrieb:@holy:
Das dürfte nicht allzu viel machen, vorallem wenn es nur den update-Thread blockt, aber ich werde es mir für die Zukunft merken, danke.
captmcneil schrieb:Gibt leider zu viele Leute, die bei solchen Performance-Issues direkt hergehen, C oder was-weiß-ich in den Himmel loben und dann wieder über die Performance von solchen Sprachen wie C# und Java herziehen, ohne überhaupt in Erwägung zu ziehen, dass hier irgendwo eine Leiche vergraben ist. Klar kann maschinennahe Programmierung immer etwas schneller sein, aber die Hauptperformance-Killer in modernen Anwendungen liegen einfach zu 95% darin vergraben, dass man heute mit den ganzen tollen Bibliotheken so viel so einfach tun kann, und sich gar keine Gedanken mehr darüber macht, was I/O in einer Schleife eigentlich bedeutet.