Re[4]: Минутка хардкора-4: Ayende Rahien: How much is the fish?
От: Sinix  
Дата: 09.01.17 13:58
Оценка: 19 (2)
Здравствуйте, Gattaka, Вы писали:

G>>>Так вот оно падает по OutOfMemory — стандартные коллекции не могут аллоцировать более 2ГБ памяти.

G>Нет, это все не работает — проверял, а не просто фантазирую.

Ну вот берём первый попавшийся пример, меняем на словарь
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace LargeArrays
{

    public struct ComplexNumber
    {
        public double Re;
        public double Im;

        public ComplexNumber(double re, double im)
        {
            Re = re;
            Im = im;
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            var p = new ComplexNumber(1, 1);
            int sizeByte = Marshal.SizeOf(typeof(ComplexNumber));

            Console.WriteLine("The size of single ComplexNumber struct is={0}", sizeByte);
            Console.WriteLine("");

            int maxCount = 200 * 1024 * 1024;
            var m1 = GC.GetTotalMemory(false);
            var dict = new Dictionary<int, ComplexNumber>();
            try
            {
                for (int i = 0; i < maxCount; i++)
                {
                    dict[i] = new ComplexNumber();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            var m2 = GC.GetTotalMemory(false);
            Console.WriteLine("Total memory: {0:N2} GB", (m2 - m1) / 1024.0 / 1024);
            Console.Read();
        }
    }
}

— работает, пока хватает памяти

G>Иными словами над перфомансом особо не задумывались. Просто для решения бизнес-задач. Еще раз отмечу, что у питона таких проблем нет и все работает на ура.

Если нужны циферки, то в свой время код на .net написанный в лоб без какой-либо оптимизации оказался у нас примерно равен вылизанному варианту PyPy. Просто питон отставал на полтора порядка.

О, вот похожий бенчмарк кстати. Вариант на шарпе там тяп-ляп сделан, если что.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.