На сколько сильно взаимодействуют эти два "языка".тут и есть фундаментальное заблуждение - это не два языка
using System;
using System.Diagnostics;
namespace stack
{
public class Program
{
static private int max = 100_000_000;
class Stack
{
private int[] sd = new int[max];
private int sp = -1;
public void Push(int data) => sd[++sp] = data;
public int Pop() => sd[sp--];
public void Rep(int sp, int data) => sd[sp] = data;
public void Inc(int sp, int data) => sd[sp] += data;
public void Dec(int sp, int data) => sd[sp] -= data;
public void Xor(int sp, int data) => sd[sp] %= data;
}
public static void StackTest()
{
var watch = new Stopwatch();
var stack = new Stack();
var count = max;
watch.Start();
for (int i = 0; i < count; i++)
stack.Push(i);
watch.Stop();
Console.WriteLine(watch.Elapsed);
watch.Restart();
for (int i = 0; i < count; i++)
stack.Xor(i, 2);
watch.Stop();
Console.WriteLine(watch.Elapsed);
watch.Restart();
for (int i = 0; i < count; i++)
stack.Pop();
watch.Stop();
Console.WriteLine(watch.Elapsed);
Console.ReadKey();
}
public static void Main() => StackTest();
}
}
bool empty() => sp < 0;
.. ну в смысле для данного прототипа )) Есть мысли перейти на селфхостинг, однако есть опасения, что мировой опыт отвергает такой подход
мопед не мойно:
Сначала мы пошли по простому пути: прикрутили IIS, создали ASP.NET-приложение с фреймворком ASP.NET Web API и начали пилить бизнес-логику. Быстро стало понятно, что вся эта конструкция не держит больше 500-700 запросов в секунду. Как бы мы ни заклинали IIS, ни подкручивали 100500 параметров, проблема не решалась. И совсем доставало, что залезть внутрь IIS нет возможности, а значит полного контроля над ситуацией нам не добиться. IIS — пресловутый черный ящик, в котором тяжело что-то кардинально изменить.
Тогда мы попробовали сервер проекта Katana (реализация OWIN-инфраструктуры от Microsoft). Katana — проект с открытым исходным кодом, поэтому можно было увидеть внутренности. К тому же, у Web API есть поддержка OWIN, а значит, сильно менять код не придется. Katana предоставляет возможность работать как с IIS, так и с их простым сервером, написанным на основе .NET-овского HttpListener. Именно его мы и взяли. Результат порадовал: теперь сервер держал около 2000 запросов в секунду, а ASP.NET приложение трансформировалось в Windows-сервис.
Однако нагрузка на сервера увеличивалась, пилились новые фичи. Становилось понятно, что и этот вариант нас тоже не устраивает. Тогда мы пошли на кардинальные меры: от всей Катаны остался только HttpListener с небольшой обвязкой для асинхронности, от Web API не осталось ничего, то есть приложение стало полностью заточено под HTTP-запросы для биддера. В результате сервер стал способен обрабатывать до 9000 запросов в секунду. Вывод прост: вся OWIN- и Web API-обвязка оказывает критическое влияние на высокопроизводительные приложения. Хотите быстрее — пишите проще и неуниверсально. (Это не говорит о том, что внутри приложения должен быть ядерный говнокод. У нас всё модульно, вполне расширяемо: DI, паттерны и всё такое)
Например:
Кусок кода 1. Мусор не собираем. Время выполнения 3 минуты.
Кусок кода 2 (переписанный кусок кода 1). Собираем мусор. Время выполнения стало 10 секунд.
если у вас комп с 4/8/16 Гб ОЗУ, а задача расходует 10-100.. 200-300 Мб - сборщик мусора вообще не будет вмешиваться (если конечно память не забита и так под завязку).. и за какие то 10 микросекунд очистит мусор, пока вы смотрите на слово типа Finished и осознаете его значение .. как то так str1 += tbArray[i, j].Text