Обновить
0
0

Пользователь

Отправить сообщение
ну и где функция которой вы измеряли?
То же самое можете сделать и в C++: выделите сразу всю память, а потом делайте placement new.

нет, там не вся память выделяется. а кусками.
и это не так просто как ты думаешь. это надо хорошо подумать как сделать.
Ничего C# не схлопнул на этапе компиляции, не надо наговаривать!
clock нормально вычисляет.
И там, и там одинаковое количество байт одинаково выделяется!

Количество системных вызовов можно уменьшить, просто выделив запас, и в дальнейшем выдавая указатель на уже ранее выделенный, свободный участок памяти (в этом запасе)!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PerfomanceTests {
	public class PerfomanceTest {
		public delegate void PerfomanceTestAction();
		String title;
		PerfomanceTestAction action;
		int count;
		
		public PerfomanceTest(String title, PerfomanceTestAction action, int count) {
			this.action = action;
			this.count = count;
			this.title = title;
		}
		
		public long MeasurePerfomance() {
			Stopwatch watch = new Stopwatch();
			watch.Start();
			int i = 0;
			LABEL:
				action();
				i++;
			if(i < count) goto LABEL;
			watch.Stop();
			return watch.ElapsedMilliseconds;
		}		

		public void Run() {
			WriteLine("Perfomance of "+title +":  " + MeasurePerfomance()+" ms");
		}
	}
	
	class Program {
		class T {
			byte c;
		}

		static void Main(string[] args) {
			new PerfomanceTest("MAlloc", PFMAlloc, 10000000).Run();
			Console.WriteLine("End!");
			Console.ReadLine();
		}
				
		static byte[] x;
		static void PFMAlloc() {
			x = new byte[100];
			//new T();
		}
	}
}


#include <iostream>
#include <string.h>
#include <random>
#include <time.h>
#include <string>
#include <sstream>

void TestPF(void func(), size_t count) {
  size_t i = 0;
  clock();
  int time0 = clock();
    while(i < count) {
      func();
      i++;
    };
  int time = clock()-time0;
  printf( "Time=" );
  printf( "%i\n", time );
};

void PFMAlloc() {
  malloc(100);
}

int main() {
  TestPF(PFMAlloc, 10000000);
  return 0;
}


и не надо тут разводить, типа шарп медленнее в этом вопросе
Нет, в C# быстрее.
Выделение объекта с полем 1 байт в 3.736 быстрее, а выделение массива 100 байт в 3.004 раз быстрее.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность