Здравствуйте, 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. Просто питон отставал на полтора порядка.
О, вот похожий
бенчмарк кстати. Вариант на шарпе там тяп-ляп сделан, если что.