12 / 14 / 1
Регистрация: 03.10.2011
Сообщений: 201

Почему программисты на C++ и Java плохо относятся к C#?Ведь C# + .NET = очень удобный язык! Все упрощено! И достаточно быстро работают программы на C#

24.12.2011, 10:52. Показов 28409. Ответов 160
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Очень интересно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2011, 10:52
Ответы с готовыми решениями:

Очень плохо работают браузеры и все, что использует интернет на Windows 10
Всем привет. Переустановил винду, решил попробовать Windows 10. Установил Google Chrome, но он как-то странно работает. Сначала он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
160
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
27.12.2011, 20:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
Я согласен.
Интересно же, как "шипит" кто-то(про оппонентов).
Отлично. Сегодня\завтра выложу свой вариант.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.12.2011, 20:37
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
А StretchBlt(или как его)?
Вызвать готовый? Или написать? Масштабировать можно по-разному. При том же уменьшении можно усреднять, а можно децимировать. Можно усреднять через разложение по rgb с делением в самом конце, а можно "в лоб". Результат будет различаться, когда сам пишешь масштабирование, то полностью это и контролируешь. А вызов API - не повод сравнивать языки.
0
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
27.12.2011, 20:38
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
void MySretch (TBitmap *p1, TBitmap *p2)
Что может быть проще? Криво? Согласен. А растр хорошо не уменьшается и с дробным коэффициентом хорошо не увеличивается.
Криво и совершенно не по задаче
И это не в моих интересах конечно говорить, но... вы правда хотите сравнивать производительность посредством этого? Боюсь что с такими "ценителями" у C++ нету никаких шансов

Цитата Сообщение от taras atavin Посмотреть сообщение
Масштабировать можно по-разному. При том же уменьшении можно усреднять, а можно децимировать. Можно усреднять через разложение по rgb с делением в самом конце, а можно "в лоб".
Намекну - выше написано про интерполяционный фильтр
Нормальную реализацию пишем, для адекватного сравнения, а не подобный говнокод
И не надо выкладывать раньше того, как я выложу, дабы избежать любых претензий
0
Заблокирован
27.12.2011, 20:47
Цитата Сообщение от taras atavin Посмотреть сообщение
Можно усреднять через разложение по rgb с делением в самом конце
Это как?
Цитата Сообщение от taras atavin Посмотреть сообщение
а можно "в лоб"
А это как?
Цитата Сообщение от taras atavin Посмотреть сообщение
Результат будет различаться, когда сам пишешь масштабирование, то полностью это и контролируешь.
Ясно, но и встроенными функциями тоже иногда можно пользоваться(то что код Painta в исходниках на сpp весит раза в четыре больше чем соответственный код писаный юзером для написания его-же на срр , ничего не значит).
Здесь хотелось бы правду узнать о windows'e.
0
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
27.12.2011, 20:57
И не о картинках речь, а просто об интерполяции. Картинки - для примера
У вас имеется инструмент, удобный и быстрый (C++) - так напишите на нем нормальную реализацию, которая сможет продемонстрировать высокую производительность, это не займет много времени и сил. Это простой пример, но все же посложнее чем это, и в отличии от double Solv может что то показать
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.12.2011, 23:19
Цитата Сообщение от vola Посмотреть сообщение
Ну-с, фанаты C++ и ненавистники C#, кто продемонстрирует явное превосходство C++?
Ежели таковые найдутся - я делаю, прикрепляю запароленный архив и даю пароль на него после появления варианта на C++
Слова громкие, но "ниочем". Позвольте я так же и тестировать буду - запущу программу на С++ на своем ПК, а на шарпе - на ведре конца 90-х. Чтобы что-то сравнивать - должны использоваться одинаковый алгоритмы. Помню у нас на втором курсе была лаба по сравнению быстродействия С/С++ и асма. У многих асм работал в несколько раз дольше, чем плюсы. О причинах догадываетесь?
0
Заблокирован
27.12.2011, 23:54
Цитата Сообщение от M128K145 Посмотреть сообщение
запущу программу на С++ на своем ПК, а на шарпе - на ведре конца 90-х.
Жесть.

Добавлено через 2 минуты

Не по теме:

Раздел по С++ все доказывает...(и не важно С++ или Паскаль).



Добавлено через 2 минуты
Я тоже ду мал про пару ведер....
0
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
28.12.2011, 01:45
А заодно сравним, кто громче всех орет о том что шарп шлак. taras atavin вон написал вариант 9-классника, какой смысл на этом вообще что то сравнивать и громко орать про производительность двух в любом случае быстрых языков, если не в состоянии ей воспользоваться?
У меня вариант и на C++ и на C#, одинаковый, так что все ок.
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
28.12.2011, 02:03
Цитата Сообщение от vola Посмотреть сообщение
У меня вариант и на C++ и на C#, одинаковый, так что все ок.
Что тогда мешает выложить исходники и сравнить?
0
Заблокирован
28.12.2011, 02:08
Могу предположить: торохтение ведр.
0
 Аватар для MegaEvgeniy
9 / 9 / 1
Регистрация: 06.11.2011
Сообщений: 113
28.12.2011, 03:49
Надо бы глобальное практическое сравнение провести... С++ vs Java vs C#

Не по теме:

Let's the carnage begin !!!

0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.12.2011, 07:57
Цитата Сообщение от taras atavin Посмотреть сообщение
m=mx*my;
Ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (mx>1.0)
{
 if (my>1.0)
 {
  m=1.0;
 }
 else
 {
  m=1.0/my;
 }
}
elese
{
 if (my>1.0)
 {
  m=1.0/mx;
 }
 else
 {
  m=1.0/mx/my;
 }
}
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3618 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
28.12.2011, 10:13
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
elese
?
Кликните здесь для просмотра всего текста
12345
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.12.2011, 10:37
M128K145, эта конструкция языка будет в следующем стандарте С++. Пока о ней знает только Тарас.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
28.12.2011, 10:37
Цитата Сообщение от M128K145 Посмотреть сообщение
elese
?
видимо в этом и состояла ошибка
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
28.12.2011, 21:24
Цитата Сообщение от Петррр Посмотреть сообщение
эта конструкция языка будет в следующем стандарте С++. Пока о ней знает только Тарас.
Это очепятка. Выплыла бы при первой же компиляции.
0
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
30.12.2011, 04:44
Собственно, сами числодробилки (абсолютно одинаковы для cpp и c#):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
static byte Clamp(float val)
        {
            if (val < 0)
                return 0;
            else if (val > 255)
                return 255;
            else
                return (byte)val;
        }
 
        static unsafe void XResizeS(byte* srcData, int srcDataStride, byte* dstData, int dstDataStride, int srcHeight, int* samples, int samplesLen)
        {
            float red = 0;
            float green = 0;
            float blue = 0;
            float alpha = 0;
            int start;
            int len;
            float weight;
 
            for (int dstY = 0; dstY < srcHeight; dstY++)
            {
                int* sample = (int*)samples;
 
                byte* dstPix = dstData + dstY * dstDataStride;
                byte* srcRow = srcData + dstY * srcDataStride;
 
                for (int dstX = 0; dstX < samplesLen; dstX++)
                {
                    start = *sample++;
                    len = *sample++;
 
                    red = 0;
                    green = 0;
                    blue = 0;
                    alpha = 0;
 
                    byte* src = srcRow + start * 4;
                    byte* srcEnd = src + len * 4;
 
                    while (src < srcEnd)
                    {
                        weight = *(float*)sample++;
 
                        blue += weight * *src++;
                        green += weight * *src++;
                        red += weight * *src++;
                        alpha += weight * *src++;
                    }
 
                    *dstPix++ = Clamp(blue);
                    *dstPix++ = Clamp(green);
                    *dstPix++ = Clamp(red);
                    *dstPix++ = Clamp(alpha);
                }
            }
        }
 
        static unsafe void YResizeS(byte* srcData, int srcDataStride, byte* dstData, int dstDataStride, int srcWidth, int* samples, int samplesLen)
        {
            float red = 0;
            float green = 0;
            float blue = 0;
            float alpha = 0;
            float weight;
            int start;
            int len;
 
            for (int dstX = 0; dstX < srcWidth; dstX++)
            {
                int* sample = (int*)samples;
 
                byte* dstPix = dstData + dstX * 4;
                byte* srcColumn = srcData + dstX * 4;
 
                for (int dstY = 0; dstY < samplesLen; dstY++)
                {
                    start = *sample++;
                    len = *sample++;
 
                    byte* src = srcColumn + start * srcDataStride;
                    byte* srcEnd = src + len * srcDataStride;
 
                    red = 0;
                    green = 0;
                    blue = 0;
                    alpha = 0;
 
                    while (src < srcEnd)
                    {
                        weight = *(float*)sample++;
 
                        blue += weight * *src++;
                        green += weight * *src++;
                        red += weight * *src++;
                        alpha += weight * *src++;
 
                        src += (srcDataStride - 4);
                    }
 
                    *dstPix++ = Clamp(blue);
                    *dstPix++ = Clamp(green);
                    *dstPix++ = Clamp(red);
                    *dstPix++ = Clamp(alpha);
 
                    dstPix += (dstDataStride - 4);
                }
            }
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
        [DllImport("NativeCode.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern unsafe void XResize(byte* srcData, int srcDataStride, byte* dstData, int dstDataStride, int srcHeight, int* samples, int samplesLen);
 
        [DllImport("NativeCode.dll", CallingConvention = CallingConvention.Cdecl)]
        public static extern unsafe void YResize(byte* srcData, int srcDataStride, byte* dstData, int dstDataStride, int srcWidth, int* samples, int samplesLen);
 
        public static void Resize(Bitmap src, Bitmap dst, Bitmap buf, Resampler resampler, bool useCpp)
        {
            unsafe
            {
                BitmapData srcData = src.LockBits(new Rectangle(Point.Empty, src.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
                BitmapData dstData = dst.LockBits(new Rectangle(Point.Empty, dst.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
                BitmapData bufData = buf.LockBits(new Rectangle(Point.Empty, buf.Size), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
 
                fixed (int* ysamples = resampler.YSamples)
                {
                    if (useCpp)
                        YResize((byte*)srcData.Scan0, srcData.Stride, (byte*)bufData.Scan0, bufData.Stride, resampler.SrcBounds.Width, ysamples, resampler.DstSize.Height);
                    else
                        YResizeS((byte*)srcData.Scan0, srcData.Stride, (byte*)bufData.Scan0, bufData.Stride, resampler.SrcBounds.Width, ysamples, resampler.DstSize.Height);
                }
 
                fixed (int* xsamples = resampler.XSamples)
                {
                    if (useCpp)
                        XResize((byte*)bufData.Scan0, bufData.Stride, (byte*)dstData.Scan0, dstData.Stride, resampler.DstSize.Height, xsamples, resampler.DstSize.Width);
                    else
                        XResizeS((byte*)bufData.Scan0, bufData.Stride, (byte*)dstData.Scan0, dstData.Stride, resampler.DstSize.Height, xsamples, resampler.DstSize.Width);
                }
 
                buf.UnlockBits(bufData);
                src.UnlockBits(srcData);
                dst.UnlockBits(dstData);
            }
        }
Сам тест:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void Test(bool useCpp)
        {
            Stopwatch sw = Stopwatch.StartNew();
 
            float scale = 10;
            Resampler resampler = new Resampler(Point.Empty, new Rectangle(Point.Empty, srcBitmap.Size), new Lanczos8Filter(), new Scale(scale, scale));
 
            int repeatCount = 10;
            for (int i = 0; i < repeatCount; i++)
                SomeWorker.Resize(srcBitmap, dstBitmap, buf, resampler, useCpp);
 
            sw.Stop();
 
            long time = sw.ElapsedMilliseconds / repeatCount;
 
            if (useCpp)
                Console.WriteLine("Cpp time: " + time);
            else
                Console.WriteLine("C# time: " + time);
        }
Добавлено через 10 минут
Результаты:
Cpp time: 554
C# time: 577

Resampler в плане производительности здесь ничего не меняет (равно как и все остальное кроме #Resize), поэтому приводить его здесь не буду, время его работы (создание таблиц xsamples\ysamples) - ну, точно не более 1ms

C++ - msvc, /O2 /Oi /Ot
0
 Аватар для MegaEvgeniy
9 / 9 / 1
Регистрация: 06.11.2011
Сообщений: 113
30.12.2011, 05:43
vola,

С++ быстреее, си плюс плюс быстреее =):dance3:

Добавлено через 1 минуту
Да и во всех книгах, которые я читал и читаю, все хором говорят - C# и JAVA менее эффективны по сравнению с C++. Но опять же всё зависит от поставленной задачи.

Добавлено через 26 минут
*** В cpp можно попробовать применить рекомендацию компилятору - register // Может регистры (или кэш память) всё разрулят в окончательную и бесповоротную победу c++?
0
4 / 4 / 0
Регистрация: 07.05.2011
Сообщений: 53
30.12.2011, 06:05
Быстрее, и что? Предлагаю посчитать разницу в процентах. Осилите?
0
 Аватар для MegaEvgeniy
9 / 9 / 1
Регистрация: 06.11.2011
Сообщений: 113
30.12.2011, 06:10
vola,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <windows.h>
#include <iostream>
#include <ctime>
using namespace std;
 
unsigned int i; // не register-переменная
unsigned int delay;
int main()
{
    setlocale(LC_ALL, "Russian");
register unsigned int j;
long start, end;
 
start = clock();
 
for(delay=0; delay<50; delay++)
for(i=0; i < 64000000; i++) ;
 
end = clock();
cout << "Количество тиков для не register-цикла: ";
cout << end-start << '\n';
 
start = clock();
for(delay=0; delay<50; delay++)
for(j=0; j < 64000000; j++) ;
end = clock () ;
cout << "Количество тиков для register-цикла: ";
cout << end-start << '\n';
 
return 0;
}
Добавлено через 1 минуту
А вот теперь сравните =)

registr всё с ног наголову у вас перевернёт =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru