Здравствуйте, Codealot, Вы писали:
C>C> for (auto& cur : vals)
C> {
C> auto num = std::stoi(cur);
C> }
C>
C>C> foreach (var val in vals)
C> {
C> var num = int.Parse(val);
C> _hash ^= num.GetHashCode();
C> }
C>
C>Для тех же данных, код на C++ выполняется за 5.9 секунд и на C# за 1.2 секунды.
C>
Вообще, в таких случаях желательно видеть полные тексты примеров. Какие типы контейнеров и элементов, что и как меряешь и пр. И какую конфигурацию ты меряешь — не Debug, случайно?
На моем ноуте картина получается прямо противоположная: на выборке в 10 миллионов элементов: C++ — 150 ms, C# — 800 ms и более. Коды примеров ниже:
| C++ (150 ms) |
| #include <iostream>
#include <vector>
#include <string>
#include <chrono>
std::vector<std::string> MakeIntSequence(int size)
{
std::vector<std::string> v;
v.reserve(size);
for (int i = 0; i < size; ++i)
{
v.push_back(std::to_string(i));
}
return v;
}
int main()
{
namespace tm = std::chrono;
const auto vals = MakeIntSequence(10000000);
const auto t0 = tm::steady_clock::now();
int hash{};
for (const auto& val : vals)
{
hash ^= atoi(val.c_str());
}
const auto dt = tm::duration_cast<tm::milliseconds>(tm::steady_clock::now() - t0);
std::cout << "Processing time: " << dt.count() << "ms" << std::endl;
}
|
| |
| C# (800 ms) |
| using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
var vals = MakeIntSequence(10000000);
var t0 = DateTime.Now;
int hash = 0;
foreach (var val in vals)
{
int num = int.Parse(val);
hash ^= num.GetHashCode();
}
var dt = DateTime.Now - t0;
Console.WriteLine("Processing time: {0}ms", dt.TotalMilliseconds);
}
static List<string> MakeIntSequence(int size)
{
var vals = new List<string>(size);
for (int i = 0; i < size; ++i)
{
vals.Add(i.ToString());
}
return vals;
}
}
}
|
| |
На бОльших выборках C# начинает колбасить не по-детски.