powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что происходит при загрузки приложений x86 и x64? почему разный эффект
12 сообщений из 12, страница 1 из 1
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043411
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее общий вопрос.
есть адский статический метод на 33.000 строк

запускаю прогу, затем вызываю етот метод.
если скомпилено под x86, то проблем нет, всё трудится нормально , быстро шустро. памяти прога ест 5Мб.
НО стоит мне скомпилить под x64 (ничего в коде не меняя), то тут начинается веселье.
съеденная память улетает в небеса. до 2 Гб. проц адски начинает тупить. У диспетчера задач появилась надпись -"не отвечает".
в итоге банально грохается приложение , и ОС начинает приходить в себя.
Что там происходит. с чего такой разный результатен? я конечно могу предполагать , но хотелось бы услышать другие мнения.
чё Framework3.5 такого вытворяет с откомпилированным оптимизированным кодом, что ему плохеет.



типа его начало , первые 40 строк

Код: 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.
       public static void kk(int KEY, int[] Q, ref int x)
        {
            if (KEY <= Q[4095]) // 0-4095
            {
                if (KEY <= Q[2047]) // 0-2047
                {
                    if (KEY <= Q[1023]) // 0-1023
                    {
                        if (KEY <= Q[511]) // 0-511
                        {
                            if (KEY <= Q[255]) // 0-255
                            {
                                if (KEY <= Q[127]) // 0-127
                                {
                                    if (KEY <= Q[63]) // 0-63
                                    {
                                        if (KEY <= Q[31]) // 0-31
                                        {
                                            if (KEY <= Q[15]) // 0-15
                                            {
                                                if (KEY <= Q[7]) // 0-7
                                                {
                                                    if (KEY <= Q[3]) // 0-3
                                                    {
                                                        if (KEY <= Q[1]) // 0-1
                                                        {
                                                            if (KEY <= Q[0]) x = 0;
                                                            else x = 1;
                                                        } // end 0-1
                                                        else  //2-3
                                                        {
                                                            if (KEY <= Q[2]) x = 2;
                                                            else x = 3;
                                                        } // end 2-3
                                                    } // end 0-3



вот так выглядит диспетчер , после закрытия проги


Справедливости ради, Framework 4.0 всё-таки этот проект запускает, и он даже полностью исполняется ( предварительно для загрузки запросив 500 Мб)
Но даже не смотря на такие запросы работает в 2 раза медленнее x86.


ПС.
потом немного поигрался.
немного поменял сигнатуру метода, а результат сильно изменился. время загрузки отличалось в 4.5 раза
я в прострации.


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public static void kk(int KEY, int[] Q, ref int x)   // загрузка за 4 секунды
        {
            if (KEY <= Q[4095]) // 0-4095
                  x=1;
        }


public static void kk(int KEY, int[] Q, ref int OUTx) //загрузка за 18 секунд
        {
            int x;
            if (KEY <= Q[4095]) // 0-4095
                  x=1;
            OUTx=x;
        }

...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043442
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,

попробуй предварительно через ngen прогнать программу.
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043467
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,

а чем это должно помочь беде?
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043476
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile,
конечно nreg решает какие-то вопросы JIT компиляции.
но тем не менее , хочется понять , что фрейм там творит.
почему в зависимости от целевой платформы такой разительный эффект.

не , понятно , что данный статический метод можно ужать до 10 строк и не парится , но это отдельная история почему сделано так.
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043481
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorа чем это должно помочь беде?
Предположение что JIT-компилятор может слишком много памяти тратить. Имея ngen-образ программа будет выполняться без JIT и можно будет сравнить поведение.
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043482
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,
а поднять версию до 4.5 нельзя?
мс вроде где то предупреждал о возможных проблемах ( пытаюсь найти)
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043485
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043499
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazile Имея ngen-образ программа будет выполняться без JIT и можно будет сравнить поведение.
не , понятно, что сделав бинарный образ, теперь загрузка идёт именно так , как и ожидалось.
но компиляцыя тоже долго шла ( 4-5 секунд )
я даже боюсь подсовывать версию FW3.5.

Где-то в степи http://technet.microsoft.com/ru-ru/subscriptions/ms241064.aspx
почитаем
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043503
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,
может стека не хватает из за размера указателя на32
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043522
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er,
можно еще переписать функцию, и использовать смещение от головы массива, или бить стек на мелкие стеки, что вы и сделали
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043699
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-er, это что, двоичный поиск в отсортированном массиве?
Ну сделайте его циклом, это же ад какой-то из if-ов...

Если операция деления для вас слишком дорогая,
а количество элементов массива является степенью 2 (4096 = 2^12),
используйте битовые сдвиги (>>).
...
Рейтинг: 0 / 0
что происходит при загрузки приложений x86 и x64? почему разный эффект
    #38043722
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDbeg-in-er, это что, двоичный поиск в отсортированном массиве?
Ну сделайте его циклом, это же ад какой-то из if-ов...
ну в данном случае , да поиск.
подумаешь ад. создавать то его плёвое дело. создал , зашил и забыл. зачем в него вообще смотреть.

Если операция деления для вас слишком дорогая, используйте битовые сдвиги (>>).
ну я в курсе. я ж написал, что на цикл можно заменить и не парится.
меня заняло то , что в двух случаях такой сильный контраст. внятного объяснения которому я лично не нахожу.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / что происходит при загрузки приложений x86 и x64? почему разный эффект
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]