Ho questa piccola sobroutine in basic
codice:
Private a$ = "Essere o non essere, questo è il problema"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
	Dim i% = 0, k% = 1000000
	Dim StartTime, EndTime As DateTime
	Dim Tempo As TimeSpan
	Dim Secondi, MilliSecondi As Double
	Dim rand As New Random(CInt(Date.Now.Ticks And Integer.MaxValue))

	StartTime = Now
	For i = 1 To k
		Dim x% = rand.Next(1, Len(a) + 1)
		Dim s$ = Left(a, x)
	Next
	EndTime = Now
	Tempo = EndTime.Subtract(StartTime)
	MilliSecondi = Tempo.Ticks / 10000
	PrintLn(MilliSecondi, "Millesecondi (basic))")

End Sub
Lanciando la pagina e cliccando sul pulsante ottengo questi 5 risultati:
453
453
422
406
422
422


Adesso converto la procedura in c#
codice:
	string a = "Essere o non essere, questo è il problema";
	
	private void Button1_Click(object sender, System.EventArgs e)
	{
		System.Int32 i = 0, k = 1000000;
		DateTime StartTime, EndTime;
		TimeSpan Tempo;
		System.Double MilliSecondi;
		Random rand = new Random((Int32)(DateTime.Now.Ticks & Int32.MaxValue));

		StartTime = DateTime.Now;
		for( i = 1; i <= k; i++)
		{
			Int32 x = rand.Next(0, a.Length);
			String s = a.Substring(0, x);
		}
		EndTime = DateTime.Now;
		Tempo = EndTime.Subtract(StartTime);
		MilliSecondi = Tempo.Ticks / 10000;
		Response.Write(MilliSecondi);

	}
ed ottengo:
515
515
546
500
500
500


Siccome mi aspetto di ottenere in c# valori inferiori a quelli ottenuti in basic, presumo che abbia tradotto male il codice :master:
Mi potreste aiutare per favore?