Re[2]: Регресс производительности при переходе с FW 3.5 SP1 на FW 4+ (String.Ind
От: 4058  
Дата: 16.05.20 19:32
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>почему явно не хотите задавать StringComparision?

VC>https://docs.microsoft.com/en-us/dotnet/api/system.stringcomparison?view=netframework-4.0

VC>Он на перформанс очень сильно влияет


Ну как сказать не хочу, в оригинальном коде он не задавался, а когда поднимался с 3.5 на 4.0, заметил существенную разницу, о чем собственно и написал.
Естественно где надо я заиспользовал локаленезависимый компаратор, все это собственно уже выше описано.
Re[11]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.05.20 19:41
Оценка:
Здравствуйте, 4058, Вы писали:

4>Здравствуйте, Serginio1, Вы писали:



4>
4>FW 3.5: Int (1000000) 100000000 op / 0,872 sec = 114699379
4>FW 4.0: Int (1000000) 100000000 op / 0,990 sec = 101008734
4>Core31: Int (1000000) 100000000 op / 0,893 sec = 111996104
4>


4>>>Поэтому смысл чего-то мерить с использованием кириллицы я не вижу.


S>> А ты попробуй, в чем проблема?


4>Заменил "X" на "Ё", результаты те-же, не понимаю, что должно было изменится, строки в .NET исторически UTF-16 и один символ ASCII в UTF-16 занимает 2 байта, собственно как и буква "Ё".


https://docs.microsoft.com/en-us/dotnet/api/system.string?redirectedfrom=MSDN&view=netcore-3.1

Только вот алгоритм сравнения может быть разный в зависимости от версии фреймворка и версии юникода

Ну во первых ты писал, что разницы между .Net Core 3.1 и FW 4.0 нет.

Стоит отметить, что на .Net Core 2.1 результат аналогичен FW 4+, что демонстрирует преемственность.


Обновил VS 2019 до версии 16.5.5, сбилдил и запустил этот "тест" под Core 3.1 — результат аналогичен Core 2.1

Разница между .Net Core 3.1 и FW 3.5 по твои данным особо то и нет. В пределе погрешности.

Ну и первоначальные результаты другие

Результаты в среднем:

FW3.5 : String (100000) 1000000 op / 1,998 sec = 500451
FW4.0 : String (100000) 1000000 op / 5,480 sec = 182481

т.е. получаю регресс производительности в 2.7 раза (!)

и солнце б утром не вставало, когда бы не было меня
Отредактировано 16.05.2020 19:46 Serginio1 . Предыдущая версия .
Re[12]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 16.05.20 19:48
Оценка:
Здравствуйте, Serginio1, Вы писали:

4>>Заменил "X" на "Ё", результаты те-же, не понимаю, что должно было изменится, строки в .NET исторически UTF-16 и один символ ASCII в UTF-16 занимает 2 байта, собственно как и буква "Ё".


S>https://docs.microsoft.com/en-us/dotnet/api/system.string?redirectedfrom=MSDN&view=netcore-3.1


S>Только вот алгоритм сравнения может быть разный в зависимости от версии фреймворка и версии юникода


Мне трудно представить, что разница может быть настолько существенна, в зависимости от минорной версии юникода (в данном случае мы получается говорим про 5.0 и 5.1).

S>Разница между .Net Core 3.1 и FW 3.5 по твои данным особо то и нет. В пределе погрешности.


Так на обычных "пробегах" по коллекции и object.Equals разницы и не должно быть.
Re[13]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.05.20 20:02
Оценка:
Здравствуйте, 4058, Вы писали:

4>Здравствуйте, Serginio1, Вы писали:


4>>>Заменил "X" на "Ё", результаты те-же, не понимаю, что должно было изменится, строки в .NET исторически UTF-16 и один символ ASCII в UTF-16 занимает 2 байта, собственно как и буква "Ё".


S>>https://docs.microsoft.com/en-us/dotnet/api/system.string?redirectedfrom=MSDN&view=netcore-3.1


S>>Только вот алгоритм сравнения может быть разный в зависимости от версии фреймворка и версии юникода


4>Мне трудно представить, что разница может быть настолько существенна, в зависимости от минорной версии юникода (в данном случае мы получается говорим про 5.0 и 5.1).


А Юникод это же не 2 байта. Те же китайские иероглифы в 2 байта не умещаются.
S>>Разница между .Net Core 3.1 и FW 3.5 по твои данным особо то и нет. В пределе погрешности.

4>Так на обычных "пробегах" по коллекции и object.Equals разницы и не должно быть.


Ну ты заменил IndexOf на Equals я и не заметил, прошу прощения. Но разница то есть.

А почему с IndexOf не привел?

Опять же https://habr.com/ru/post/481558/

На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза. В Core JIT научился в некоторых ситуациях девирутализировать виртуальные методы, т.е. они вызываются напрямую. Более того, такие методы могут быть заинлайнены. В данном случае девиртуализируется метод EqualityComparer.Default.Equals, который используется для сравнения элементов. В случае с Int всё сводится к вызову Int32.Equals, который к тому же инлайнится. В итоге получившийся код по эффективности близок к прямому сравнению двух Int.

Кстати, раньше я всегда думал, что метод Contains внутри вызывает IndexOf, но оказалось, что это верно только для Core. В полном фреймворке это разные методы, и работают они с разной скоростью.

и солнце б утром не вставало, когда бы не было меня
Отредактировано 16.05.2020 20:05 Serginio1 . Предыдущая версия .
Re[14]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 16.05.20 20:24
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> А Юникод это же не 2 байта. Те же китайские иероглифы в 2 байта не умещаются.


Для UTF-16 либо 2 байта (например для ASCII, кириллицы, французского и т.п.), либо 4 байта (для некоторых иероглифов и прочей лабуды).
Строки в .NET исторически в UTF-16, можете взять дамп и посмотреть.
Поэтому было не понятно зачем нужно использовать кириллицу для теста и что должно было изменится.

4>>Так на обычных "пробегах" по коллекции и object.Equals разницы и не должно быть.


S> Ну ты заменил IndexOf на Equals я и не заметил, прошу прощения. Но разница то есть.


Я не заменял IndexOf на Equals, я просто пояснил что делает обычный поиск по коллекции.

S>Опять же https://habr.com/ru/post/481558/


S>

S>На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза.


Я этого что-то не прочувствовал.
Просьба на маркетологические "исследования" не ссылаться, можете взять мой пример, и их какой-нибудь пример и сравнить результаты.
Re[15]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.05.20 21:02
Оценка:
Здравствуйте, 4058, Вы писали:

4>Здравствуйте, Serginio1, Вы писали:


S>> А Юникод это же не 2 байта. Те же китайские иероглифы в 2 байта не умещаются.


4>Для UTF-16 либо 2 байта (например для ASCII, кириллицы, французского и т.п.), либо 4 байта (для некоторых иероглифов и прочей лабуды).

4>Строки в .NET исторически в UTF-16, можете взять дамп и посмотреть.
4>Поэтому было не понятно зачем нужно использовать кириллицу для теста и что должно было изменится.

4>>>Так на обычных "пробегах" по коллекции и object.Equals разницы и не должно быть.


S>> Ну ты заменил IndexOf на Equals я и не заметил, прошу прощения. Но разница то есть.


4>Я не заменял IndexOf на Equals, я просто пояснил что делает обычный поиск по коллекции.


S>>Опять же https://habr.com/ru/post/481558/


S>>

S>>На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза.


4>Я этого что-то не прочувствовал.

4>Просьба на маркетологические "исследования" не ссылаться, можете взять мой пример, и их какой-нибудь пример и сравнить результаты.
Ну ты так и не привел тест с IndexOf.
И можешь сравнить тесты "маркентологов". Опровергни...
и солнце б утром не вставало, когда бы не было меня
Re[15]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 16.05.20 21:24
Оценка:
Здравствуйте, 4058, Вы писали:

4>Здравствуйте, Serginio1, Вы писали:


S>> А Юникод это же не 2 байта. Те же китайские иероглифы в 2 байта не умещаются.


4>Для UTF-16 либо 2 байта (например для ASCII, кириллицы, французского и т.п.), либо 4 байта (для некоторых иероглифов и прочей лабуды).

4>Строки в .NET исторически в UTF-16, можете взять дамп и посмотреть.
4>Поэтому было не понятно зачем нужно использовать кириллицу для теста и что должно было изменится.

Теперь надо выяснить чем отличаются версии Unicode. По твоим утверждениям нет. Но если сравнивать без учета локали, то разницы то и нет.

Интересно почему тогда string.Contains дает аналогичные результаты на 3.5 и 4+, может локале-ориентированный компаратор сильно "фонит":
c += arr.Count(s => s.Contains(key));


3.5: String (100000) 1000000 op / 0,248 sec = 4030540
4.0: String (100000) 1000000 op / 0,237 sec = 4205221


Также аналогичные результаты можно получить, если явно в качестве компаратора указать StringComparison.Ordinal:

c += arr.Count(s => s.IndexOf(key, StringComparison.Ordinal) > -1);


3.5: String (100000) 1000000 op / 0,246 sec = 4053168
4.0: String (100000) 1000000 op / 0,239 sec = 4181658




4>>>Так на обычных "пробегах" по коллекции и object.Equals разницы и не должно быть.


S>> Ну ты заменил IndexOf на Equals я и не заметил, прошу прощения. Но разница то есть.


4>Я не заменял IndexOf на Equals, я просто пояснил что делает обычный поиск по коллекции.


S>>Опять же https://habr.com/ru/post/481558/


S>>

S>>На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза.


4>Я этого что-то не прочувствовал.

4>Просьба на маркетологические "исследования" не ссылаться, можете взять мой пример, и их какой-нибудь пример и сравнить результаты.

На самом деле в производительность .Net Core затратили много труда.
Развивают и CoreRT (.NET Native).

Вот возьми и опровергни их результаты.
Твои исходные данные ну никак не соответсвуют реальным. Нужно брать данные из реальной базы данных.

Да и макркентологи немного другой тест привели

 public int List_Contains()
    {
        int count = 0;
        List<T> collection = _list;
        T[] array = _lookupValues;

        for (int i = 0; i < array.Length; i++)
        {
            if (collection.Contains(array[i]))
                count++;
        }

        return count;
    }


Проверь их алгоритм. Да это не indexOf, но они утверждают
https://habr.com/ru/post/481558/

На Core 3 поиск Int в List стал примерно в 6 раз быстрее, а поиск строк — в 1.4 раза. В Core JIT научился в некоторых ситуациях девирутализировать виртуальные методы, т.е. они вызываются напрямую. Более того, такие методы могут быть заинлайнены. В данном случае девиртуализируется метод EqualityComparer.Default.Equals, который используется для сравнения элементов. В случае с Int всё сводится к вызову Int32.Equals, который к тому же инлайнится. В итоге получившийся код по эффективности близок к прямому сравнению двух Int.

Кстати, раньше я всегда думал, что метод Contains внутри вызывает IndexOf, но оказалось, что это верно только для Core. В полном фреймворке это разные методы, и работают они с разной скоростью.


Опровергни их результаты. Заодно можно взять их метод
ValuesGenerator.ArrayOfUniqueValues<T>
и солнце б утром не вставало, когда бы не было меня
Re[16]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 16.05.20 21:31
Оценка: 18 (1)
Здравствуйте, Serginio1, Вы писали:

S> Ну ты так и не привел тест с IndexOf.

S> И можешь сравнить тесты "маркентологов". Опровергни...

Это совершенно не то, что обсуждалось в исходном сообщении, но на данной "синтетике" Core всех "порвал":

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        StrBench(1000000);
    }

    static void StrBench(int arrSize)
    {
        const int cnt = 10;

        List<string> arr = new List<string>(arrSize);
        for (int j = 0; j < arrSize; j++)
            arr.Add(string.Format("{0}{1}{2}", new string('Ё', 100), BuildKey(j), new string('x', 100)));

        string key = arr[arr.Count - 1];
        int c = 0;

        var sw = new System.Diagnostics.Stopwatch();
        sw.Start();

        for (int i = 0; i < cnt; i++)
            c += arr.IndexOf(key);

        double ts = sw.Elapsed.TotalSeconds;
        ulong total = (ulong)arrSize * (ulong)cnt;

        Console.WriteLine("String ({3}) {0} op / {1:0.000} sec = {2:0}", total, ts, total / ts, arrSize);
    }

    static string BuildKey(int i)
    {
        return i.ToString().PadLeft(10, '0');
    }
}


FW 3.5: String (1000000) 10000000 op / 0,689 sec = 14503480
FW 4.0: String (1000000) 10000000 op / 0,315 sec = 31732603
Core31: String (1000000) 10000000 op / 0,291 sec = 34337193

Core31 и FW 4.0 почти равны, 3.5 далеко в хвосте ...

Теперь по int-ам:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        IntBench(1000000);
    }

    static void IntBench(int arrSize)
    {
        const int cnt = 1000;

        List<int> arr = new List<int>(arrSize);
        for (int j = 0; j < arrSize; j++)
            arr.Add(j);

        int key = arrSize - 1;
        int c = 0;

        var sw = new System.Diagnostics.Stopwatch();
        sw.Start();

        for (int i = 0; i < cnt; i++)
            c += arr.IndexOf(key);

        double ts = sw.Elapsed.TotalSeconds;
        ulong total = (ulong)arrSize * (ulong)cnt;

        Console.WriteLine("String ({3}) {0} op / {1:0.000} sec = {2:0}", total, ts, total / ts, arrSize);
    }
}


FW 3.5: String (1000000) 1000000000 op / 1,619 sec = 617788936
FW 4.0: String (1000000) 1000000000 op / 0,630 sec = 1586526708
Core31: String (1000000) 1000000000 op / 0,278 sec = 3593765105

Core31 по отношению к FW 4.0 выдал профит в 2.3 (!), и почти в 6-ть раз по отношению к FW 3.5.

P.S. Интересно с чем эти "маркетологи" сравнивали Core.
Re[16]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 16.05.20 21:33
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Опровергни их результаты. Заодно можно взять их метод

S> ValuesGenerator.ArrayOfUniqueValues<T>

Некоторые результаты тут:
http://rsdn.org/forum/dotnet/7732000.1
Автор: 4058
Дата: 17.05.20


Действительно эти ребята кое-чего "подтянули".
Re[15]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.05.20 07:05
Оценка:
Здравствуйте, 4058, Вы писали:

4>Здравствуйте, Serginio1, Вы писали:


S>> А Юникод это же не 2 байта. Те же китайские иероглифы в 2 байта не умещаются.


4>Для UTF-16 либо 2 байта (например для ASCII, кириллицы, французского и т.п.), либо 4 байта (для некоторых иероглифов и прочей лабуды).

4>Строки в .NET исторически в UTF-16, можете взять дамп и посмотреть.
4>Поэтому было не понятно зачем нужно использовать кириллицу для теста и что должно было изменится.

Если есть зависимость от версии Юникода, то можно посмотреть на скорость сортировки.
Взять набор символов и перемешивать на каждой итерации. https://ru.stackoverflow.com/questions/547996/Как-перемешать-случайно-переставить-элементы-в-массиве/

Если с сортировкой все нормально, то надо писать, что бы подправили IndexOf
и солнце б утром не вставало, когда бы не было меня
Re[17]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.05.20 07:45
Оценка:
Здравствуйте, 4058, Вы писали:

4>FW 3.5: String (1000000) 1000000000 op / 1,619 sec = 617788936

4>FW 4.0: String (1000000) 1000000000 op / 0,630 sec = 1586526708
4>Core31: String (1000000) 1000000000 op / 0,278 sec = 3593765105

4>Core31 по отношению к FW 4.0 выдал профит в 2.3 (!), и почти в 6-ть раз по отношению к FW 3.5.


4>P.S. Интересно с чем эти "маркетологи" сравнивали Core.


C C++ Я уже писал про CoreRT. Это наследник .Net Core. Там используется компилятор С++

https://stackoverflow.com/questions/34665026/whats-the-difference-between-net-coreclr-corert-roslyn-and-llilc
https://proglib.io/p/aot-dotnet/
и солнце б утром не вставало, когда бы не было меня
Re[3]: Регресс производительности при переходе с FW 3.5 SP1
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.05.20 13:44
Оценка:
Здравствуйте, 4058, Вы писали:

4>Невнимательно читаешь, во первых речь идет конкретно о String.IndexOf (в названии темы даже присутствует), и тот кусок кода просто изобилировал его использованием, и "тупой" перенос с 3.5 на 4.0 на том участке дал заметный регресс производительности, что в результате привело к негативным последствиям.


Я как раз внимательно все прочел. И в названии темы String.IndexOf не присутствует. Название вон сверху.

4>В данном случае код местами переписан, проблемы нет (плюс профит от распараллеливания средствами LINQ), но беспокоит сам факт, что пришлось это делать.


Это из серии обжегся на молоке, дую на воду. Ну. одна функция стала по медленнее. Никакого отношения к производительности самого дотнета это не имеет. Производительность зависит от кучи фаторов. И главное это работа компилятора (джит, нген) и сборщика мусора. Вот в 64-битной версии действительно есть некоторая деградация производительности. Ее отдали авторам плюсового компилятора делать (в те времена) и у них получилось не очень хорош. Но сейчас вроде как сделали новую версию и она вполне на уровне.

4>Проблема, именно в том, что пришлось внести изменения в код при подъеме версии FW, чего я например ни разу не делал с 1.0 по 3.5 SP1


Ну, а что ты хочешь? По сути между 3.51 и 4.0 произошла смена эпох. Фактически был только 3 рантайма: 1.0, 2.0, и 4.0 (ну сейчас еще Кор есть). Остальное промежуточные версии сам рантайм затрагивающие мало. При переходе с 1.х на 2.х проблема хватало. И при переходе с 2.х на 4.х тоже. Вы еще очень легко отделались, если это единственная проблема при переносе.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 17.05.20 15:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я как раз внимательно все прочел. И в названии темы String.IndexOf не присутствует. Название вон сверху.


В root-овом сообщении присутствует:
http://rsdn.org/forum/dotnet/7731686.1
Автор: 4058
Дата: 16.05.20


VD> ... Ну. одна функция стала по медленнее. Никакого отношения к производительности самого дотнета это не имеет. Производительность зависит от кучи фаторов. И главное это работа компилятора (джит, нген) и сборщика мусора.


В данном случае эта функция использовалась часто, никто не говорит про .NET в целом, речь конкретно про String.IndexOf и заметно различающийся performance в зависимости от версии .NET Runtime.

VD>Ну, а что ты хочешь?


Очевидно, чтобы такого не было.

VD>При переходе с 1.х на 2.х проблема хватало.


Достаточно много кода мигрировал с 1 на 2, потом на 3/3.5, подобного особо не замечал.

VD>И при переходе с 2.х на 4.х тоже. Вы еще очень легко отделались, если это единственная проблема при переносе.


Пока перевел небольшой проект только ради возможности удобно распараллелить (Parallel LINQ) обработку достаточно больших массивов текстовых данных, чисто для экономии своего времени, пока других сюрпризов между runtime-м 2.0 и 4.0 не заметил, проект простой и судить особо не о чем.
Отредактировано 17.05.2020 17:18 4058 . Предыдущая версия .
Re[18]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 18.05.20 07:28
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> C C++ Я уже писал про CoreRT. Это наследник .Net Core. Там используется компилятор С++


Действительно приятно, что они обращают внимание на производительность, но в моем случае Core скорее противопоказан, т.к. много унаследованного (да и не только) кода цепляется за window-овое окружение. Я и так использую сторонние лайбы (иногда платные), а в случае Core мне понадобиться тащить еще больше стороннего, т.к. по очевидным причинам в погоне за мультиплатформенностью там много чего полезного нет.

Использовать Core меня пожалуй обяжет вектор на импортозамещение в моей конторе, но у меня столько унаследованного кода, что проще поменять контору.
Могу кратко рассказать, как у нас 4 года назад позанимались импортозамещением ...

Есть ряд сильно устаревших систем на FoxPro/dBase (разработка их велась еще с 96-го года), есть ряд устаревших систем использующих не реляционные (очень модные в далекие времена) БД типа Pick https://en.wikipedia.org/wiki/MultiValue (у нас где-то с 94-го), причем эти системы почти не развиваются, но все еще активно используются.

Основной же "интерпрайз" (развивающийся и активно использующийся) я заморозил на .NET 3.5 SP1 (и студия кстати 2008 SP1), а в качестве БД сейчас используется Oracle 10/11 и MSSQL 2008R2/2012.
[Причем Oracle мне тоже навязали 10 лет назад, но это уже другая история.]
Так вот, этот интерпрайз также активно использует данные из БД FoxPro/dBase и Universe, к которым вероятно будет проблематично подобрать вменяемые драйвера при переходе на Core, также есть приличный объем унаследованного кода, который цепляется за WINAPI и прочее виндовое окружение.

Так вот, в конце 2016-го нужно было где-то использовать PostgreeSQL, т.к. он в рамках "импортозамещения" оказался обязателен к использованию в моем учреждении. Хочу обратить внимание, под замещением получается подразумевается — использовать, а не заместить .
Поскольку на горизонте давно маячила задача по сбору аналитики (отчеты/статистика и т.п.) из данных разбросанных по различным хранилищам (в данном случае это получается FoxPro/dBase, Universe/Pick, Oracle, MSSQL), то была создана БД PgSQL, в которую с определенным временным интервалом мигрируются необходимые данные из вышеперечисленных хранилищ. К счастью после миграции эта БД по сути ReadOnly, не считая различных логов.
Отдельно стоит упомянуть страдания по выжиманию производительности из PgSQL, т.к. сколько памяти и ядер я ему не выделял, и как не помогал планировщику запросов hint-ами, но на той же машине он прилично отставал от MSSQL или Oracle. Речь идет в окрестностях 30 млн записей на таблицу, не сказать, что прям много для современного железа. Может конечно беда в том, что наши доморощенные "импортозамещенцы" развернули PgSQL на винде, а в родном НЕ виндовом окружении было-бы лучше. Не могу сказать.

В рамках вышеобозначенного вектора на импортозамещение, теперь собираются с винды переползать на "отечественный" Astra Linux.
Клиенты у меня исторически под Web (ASP.NET). Почти и так все нормально работает под Chromium-браузерами, единственный нюанс, это в ряде мест используются ActiveX-ы для работы с ЭЦП и сканером (в т.ч. сканером штрих-кодов). Для ЭЦП и так есть официальный плагин под различные браузеры, но вот для доступа к сканеру вероятно плагин прийдется писать самому. Вообщем клиентов перевести с винды, пускай и не просто, но все-таки можно.

А серверная часть это беда, т.к. под Linux, очевидным выбором будет Core, но в нём как было выше озвучено много чего нет (ибо мультиплатформенность).
Re[19]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 18.05.20 07:52
Оценка:
Здравствуйте, 4058, Вы писали:

4>А серверная часть это беда, т.к. под Linux, очевидным выбором будет Core, но в нём как было выше озвучено много чего нет (ибо мультиплатформенность).


В ноябре выпускается .Net Core 5
https://habr.com/ru/company/microsoft/blog/493390/

В ожидании следующего основного выпуска .NET 5 мы продолжим объединять .NET в единую платформу, включив нашу модель приложения для мобильных устройств .NET (Xamarin) в .NET 5. .NET 5 будет включать ASP.NET Core, Entity Framework Core, WinForms, WPF, Xamarin и ML.NET. Впервые вся платформа будет использовать унифицированный BCL (библиотеки базовых классов) для всех моделей приложений. Наличие версии 5, которая выше, чем у .NET Core и .NET Framework, также дает понять, что .NET 5 — это будущее .NET, единой унифицированной платформы для создания приложений любого типа.


Будет поддержка COM https://docs.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com

Не будет поддержки WCF (только клиент) , но можно делать SoapServer https://github.com/DigDes/SoapCore

Ну и сейчас можно часть перенести
https://docs.microsoft.com/ru-ru/dotnet/core/porting/windows-compat-pack
https://docs.microsoft.com/ru-ru/dotnet/core/porting/winforms
и солнце б утром не вставало, когда бы не было меня
Отредактировано 18.05.2020 7:58 Serginio1 . Предыдущая версия . Еще …
Отредактировано 18.05.2020 7:56 Serginio1 . Предыдущая версия .
Re[20]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 18.05.20 08:15
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Будет поддержка COM https://docs.microsoft.com/en-us/dotnet/core/native-interop/expose-components-to-com


S>Ну и сейчас можно часть перенести

S>https://docs.microsoft.com/ru-ru/dotnet/core/porting/windows-compat-pack
S>https://docs.microsoft.com/ru-ru/dotnet/core/porting/winforms

Конкретно насчет Windows Compatibility Pack:

Пакет обеспечения совместимости Windows основан на .NET Standard и обеспечивает доступ к таким технологиям, которые доступны только в Windows. Это особенно полезно для клиентов, которые хотят перейти на .NET Core, но по меньшей мере на первом этапе планируют оставаться в Windows. В этом сценарии возможность использования технологий, предназначенных только для Windows, устраняет препятствия для миграции.


Т.е. это будет как с WPF, вот вам Core 3, в нем теперь есть WPF, но работать это будет только под Windows.

Меня Core интересует только в случае отказа от windows, и под тем-же Linux-ом ничего из вышеперечисленного не будет.
Re[21]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 18.05.20 08:21
Оценка:
Здравствуйте, 4058, Вы писали:

4>Т.е. это будет как с WPF, вот вам Core 3, в нем теперь есть WPF, но работать это будет только под Windows.


4>Меня Core интересует только в случае отказа от windows, и под тем-же Linux-ом ничего из вышеперечисленного не будет.


Тогда есть Xamarin.Forms https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/
и солнце б утром не вставало, когда бы не было меня
Re[21]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 18.05.20 08:23
Оценка:
Здравствуйте, 4058, Вы писали:



4>Т.е. это будет как с WPF, вот вам Core 3, в нем теперь есть WPF, но работать это будет только под Windows.


Да только при этом будуи использоваться библиотеки только .Net Standard и соответственно компилятор коровский
и солнце б утром не вставало, когда бы не было меня
Re[22]: Регресс производительности при переходе с FW 3.5 SP1
От: 4058  
Дата: 18.05.20 08:43
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, 4058, Вы писали:


4>>Т.е. это будет как с WPF, вот вам Core 3, в нем теперь есть WPF, но работать это будет только под Windows.


4>>Меня Core интересует только в случае отказа от windows, и под тем-же Linux-ом ничего из вышеперечисленного не будет.


S>Тогда есть Xamarin.Forms https://docs.microsoft.com/ru-ru/xamarin/xamarin-forms/


Так сложились обстоятельства, что .NET у нас используется преимущественно для написания различных сервисов и консолей, а клиенты у меня тонкие, чисто под браузер (не считая пару ActiveX), поэтому настольный GUI (WinForms, WPF, Xamarin.Forms) меня не интересует.

От коллег из других контор наслышан про куцость Xamarin.Forms, у них как раз клиенты толстые (или как минимум утолщенные), поэтому они попробовали.

4>Т.е. это будет как с WPF, вот вам Core 3, в нем теперь есть WPF, но работать это будет только под Windows.


S>Да только при этом будуи использоваться библиотеки только .Net Standard и соответственно компилятор коровский


Повторюсь, Core имеет смысл использовать там, где нет возможности использовать Windows.
Использовать Core под Windows для меня выглядит нелогичным, типа давайте перейдем на Core просто так.
Re[23]: Регресс производительности при переходе с FW 3.5 SP1
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 18.05.20 09:36
Оценка:
Здравствуйте, 4058, Вы писали:

4>От коллег из других контор наслышан про куцость Xamarin.Forms, у них как раз клиенты толстые (или как минимум утолщенные), поэтому они попробовали.

Ну они развиваются. https://github.com/xamarin/Xamarin.Forms/wiki/Feature-Roadmap

Конечно до уровня WPF им будет далеко.

4>Повторюсь, Core имеет смысл использовать там, где нет возможности использовать Windows.

4>Использовать Core под Windows для меня выглядит нелогичным, типа давайте перейдем на Core просто так.

Просто .Net Framework развиваться не будет. Ну по твоим 3.5, я так понимаю тебе не особо то и нужно.
Лет на 10 хватит
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.