после перехода с .NET 3.5 (среда выполнения .NET 2.0) на NET 4.0 мы можем увидеть снижение производительности при выделении больших блоков памяти. Просмотрите следующий тестовый код. Это минималистичная программа тестирования, представляющая реальный сценарий, который мы используем. Может ли кто-нибудь объяснить резкую разницу между средой выполнения .NET 2.0 и 4.0, которая намного медленнее? Действия по воспроизведению:
- Импортируйте код в консольное приложение C #.
- Установите целевую платформу на x64.
- Нацельтесь на .NET 3.5 и сделайте сборку Release.
- Запустите EXE (НЕ запускайте из IDE!) И введите "test" в консоль.
- Ждите результатов.
- Повторите для .NET 4.0.
Спасибо.
Алекс
class Program {
static DateTime firstdate, lastdate;
const int CHUNKSIZE = 10 * 1024 * 1024; // 10 MB.
const int TRIALS = 10000;
static void startmeasure() {
firstdate = DateTime.Now;
}
static void stopmeasure() {
lastdate = DateTime.Now;
var duration = lastdate.Subtract(firstdate);
Console.WriteLine("Test duration:" + duration.TotalSeconds.ToString());
}
static void Main(string[] args) {
string input;
do {
input = Console.ReadLine();
switch (input) {
case "test":
handletest();
break;
}
} while (input != "exit");
}
static void handletest() {
startmeasure();
byte[] data;
for (int i = 0; i < TRIALS; i++) {
data = getdata(CHUNKSIZE);
}
stopmeasure();
}
static byte[] getdata(int size) {
return new byte[size];
}
}