Здравствуйте, criosray, Вы писали:
C>Здравствуйте, ollv, Вы писали:
G>>>>Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.
ГВ>>>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше. O>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. C>Откуда у С++ "высокие абстракции"? Вы явно что-то путаете. Если Вы считаете уличную магию Александресску — высокими абстракциями, то вынужден Вас разочаровать...
Александреску С++ не заканчивается.
C>"Архитектурные решения" на С++ тоже довольно примитивны на фоне управляемых языков. Простейшие примеры: IoC/DI и AoP, из более сложных —
метапрограммирования типа того, что в Nemerle, ну и конечно всякие DSL...
Много всего перечислено, в то время как сравнивать надо нечто одно, с чем-то одним. Толку сравнивать управляемые языки с С++, на котором решаются в основном нативные задачи? Кроме того, на плюсах можно реализовать подобие, те-же кортежи, замыкания все это вполне реализуемо (правда в жесткой типизации)
А вот как вы реализуете алгоритмику с поздним связыванием на немерле? Когда последовательность выполняемых методов их овнеров и непосредственно выполнение разнесены во времени? Задайте на немерле список выполняемых задач с поздним биндингом как параметров, так и классов с возможностью отмаршалиться в процессе выполнения на заданный сред? Да еще и с использованием кома, да еще и без поддержки диспатч, а потом, все это напрямую дернуть из менеджед кода Или лямбда исчисление перевешивает ? — очень сильно сомневаюсь.
C>C++ выигрывает там, где требуется детерменированное освобождение памяти и низкоуровневые оптимизации, но за это приходится платить сложностью разработки и сопровождения, а соответственно и ценой.
) маловато , мне как-то даже влом перечислять. Почти все теже жава проекты тянут за собой толпу плюсовых прослоек к системе, для разных нужд, не говоря о ключевых ресурсоемких вычислениях.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, Anton Batenev, Вы писали:
Х>> AB>Я просто не в теме, расскажи, а что значит AAA? Х>> Short answer: Х>> High-quality games with high budget.
AB>Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.
такой не видел и скорее такого не существует, т.к. AAA ето скорее собирательное название для "высококлассных игр с большим бюджетом", если больщой бюджет ещё можно как-то формализовать, то "высококлассный" врятли. Про "BBB" игры не слышал, разве что в качестве метафоры.
Здравствуйте, gandjustas, Вы писали:
Х>>дык потому что мало C++ программистов, дорого они стоят, а бизнес-систем много. и поддерживать их будут программеры "на местах", а им лучше язык попроще дать, без острых углов. G>Судя по форуму — совсем немало.
тем и примечателен (для меня по крайней мере), но ето форум. G>А судя по вакансиям хорошему программисту на шарпе платят больше, чем хорошему программисту на С++.
судя по вакансиям слабо коррелирует с языком, гораздо значительней с опытом работы.
G>Я отлично знаю что такое движок, даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.
ну чтож так сразу херней, експириенс то получил, и то хорошо.
Х>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA. G>Да ну. И на чем ты напишешь игру для XBox 360?
я врятли напишу, но будь моя воля то движок ессно куцый C++/Direct3D
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, ollv, Вы писали:
O>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков G>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
O>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы G>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают. G>А вот наоборот — редко бывает.
пустые слова, шарп расхолаживает
O>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы. G>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
биндинг в плюсах покрывает делегаты, а вот обратного нет, т.к. теже функторы это лишь одно из множества, и не потому, что не хватает, а потому, что еще и так можно. а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность, т.к. хочется сделать красиво, а не можется
G>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код. возможность перегружать это от бедности?
O>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так) G>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.
ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком O>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее G>За последние 5 лет какое развитие было?
фреймворки ж)
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Здравствуйте, Хвост, Вы писали:
Х>>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA. G>>Да ну. И на чем ты напишешь игру для XBox 360? Х>я врятли напишу, но будь моя воля то движок ессно куцый C++/Direct3D
А я вот специально задался вопросом как писать для XBox 360 без XNA. Вообще материалов в сети по этой теме нету.
Никаких средств разрабтки без XNA не нашел.
Видится мне что на XBox игры только на XNA, а соовественно .NET\C#
Игр таких много — http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
Здравствуйте, ollv, Вы писали:
O>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы G>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают. G>>А вот наоборот — редко бывает. O> пустые слова, шарп расхолаживает
Мы говорим об индусах или программистах? Не согласен. В шарпах не приходится тратить время на вещи которые должны быть даны, что в свою очередь позволяет сосредоточиться на коде как токовом и думать о алгоритме, логике.
В шарпах писуть гуй проще намного, это ли ваш повод утверждать что шарп расхолаживает?
O>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы. G>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает. O> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
Здравствуйте, gandjustas, Вы писали:
G>В этом месте все сторонники C# начинают громко смеяться G>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой. G>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++
G>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.
пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
Здравствуйте, gandjustas, Вы писали: G>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции? если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?
Здравствуйте, ollv, Вы писали:
O>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, ollv, Вы писали:
O>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков G>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
O>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы G>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают. G>>А вот наоборот — редко бывает. O> пустые слова, шарп расхолаживает
Чего расхолаживает?
O>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы. G>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает. O> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
А в чем? Зачем скобки переопределять надо?
O>биндинг в плюсах покрывает делегаты, а вот обратного нет, т.к. теже функторы это лишь одно из множества, и не потому, что не хватает, а потому, что еще и так можно.
Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
O>а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность,
Особенно тормоза
O>т.к. хочется сделать красиво, а не можется
Красиво это как? Нафигачить шаблоков?
И как на плюсах сделать красиво IoC-контейнер?
G>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код. O> возможность перегружать это от бедности?
Нет, примерение этой возможности — от бедности.
В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.
O>>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так) G>>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы. O> ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком
Менеджед С++ вам не поможет, он интеропа между дувумя бинарями не добавляет.
COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.
O>>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее G>>За последние 5 лет какое развитие было? O> фреймворки ж)
Мы про язык\стандартную библиотеку.
Здравствуйте, Хвост, Вы писали:
Х>Здравствуйте, gandjustas, Вы писали:
G>>В этом месте все сторонники C# начинают громко смеяться G>>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой. G>>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++
G>>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта. Х>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
Тоже ничего не произойдет, поменяется ссылка внутри метода.
Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.
Здравствуйте, Sorantis, Вы писали:
S>Здравствуйте, ollv, Вы писали:
O>>Здравствуйте, VladD2, Вы писали:
VD>>>Здравствуйте, ollv, Вы писали:
O>>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.
VD>>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++? O>> на каком конкретно? Если языки аля джава или дотнет, или нечто другое из структурных языков, то любой шаблон не привязанный к реальным сущностям является для них недостижимым. дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).
S>Generic Covariance and Contra-Variance in C# 4.0
т.е. ві хотите сказать, что єти дженерики дают возможность писануть
Здравствуйте, Хвост, Вы писали:
Х>Здравствуйте, gandjustas, Вы писали: G>>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности. Х>а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции?
На этапе компиляции как раз проще всего это сделать. Гарантировать на этапе выполнения константность всего объекта сложно и затратно.
Х>если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?
Видимо потому что .NET не до конца safe из-за того что работает в unsafe окружении решили не обманывать народ с нечестной константностью.
А вообще const — не самое важно что может быть в язке, иммутабельность гораздо круе в этом плане.
Здравствуйте, gandjustas, Вы писали:
G>А я вот специально задался вопросом как писать для XBox 360 без XNA. Вообще материалов в сети по этой теме нету. G>Никаких средств разрабтки без XNA не нашел.
ну как, есть железка для дебага — xbox 360 dev kit, ето тотже ящик только с возможностью подключения к нему с персоналки и дебага всех потрохов, разработка ведётся так — на свой компутер ставишь студию, ставишь дхсдк, рядом ставишь хящик девкит, девкитовский софт ставишь себе на компутер. И всё, здравствуй С++ и Direct3D, фигач — заливай в девкит, дебажь в студии как обычный C++ код (вроде удалённой отладки), радуйся жизни. XNA ето такой небольшой фреймворк для создания казуальных игр скорее, или прототипирования идей, но на хне производительности не добиться, на платформах где игры в целях оптимизации работы аллоцируют динамическую память только один раз за сеанс — гц, дотнет, сишарп, хны пролетают.
B>неиспользуемые объекты будут держаться до заврешения программы. B>И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.
B>P.S. это высосанный из пальца пример, но проблему он показывает вполне.
Этот высосанный из пальца пример показывает, что ты не знаешь ни c#, ни то как работает gc.
Читаем C# Language Specification:
3.9 Automatic memory management
C# employs automatic memory management, which frees developers from manually allocating and freeing the memory occupied by objects. Automatic memory management policies are implemented by a garbage collector. The memory management life cycle of an object is as follows:
1. When the object is created, memory is allocated for it, the constructor is run, and the object is considered live. 2. If the object, or any part of it, cannot be accessed by any possible continuation of execution, other than the running of destructors, the object is considered no longer in use, and it becomes eligible for destruction. The C# compiler and the garbage collector may choose to analyze code to determine which references to an object may be used in the future. For instance, if a local variable that is in scope is the only existing reference to an object, but that local variable is never referred to in any possible continuation of execution from the current execution point in the procedure, the garbage collector may (but is not required to) treat the object as no longer in use.
3. Once the object is eligible for destruction, at some unspecified later time the destructor (§10.13) (if any) for the object is run. Unless overridden by explicit calls, the destructor for the object is run once only.
4. Once the destructor for an object is run, if that object, or any part of it, cannot be accessed by any possible continuation of execution, including the running of destructors, the object is considered inaccessible and the object becomes eligible for collection.
5. Finally, at some time after the object becomes eligible for collection, the garbage collector frees the memory associated with that object.
Так что твой жуткий массив может быть собран мусорщиком сразу после Console.WriteLine. Кстати, по примеру, у тебя весь массив — массив null-ов.
Здравствуйте, gandjustas, Вы писали:
Х>>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C# G>Тоже ничего не произойдет, поменяется ссылка внутри метода. G>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.
Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, gandjustas, Вы писали:
O>> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом, G>А в чем? Зачем скобки переопределять надо?
Ну разумеется, чтобы догнать уходящий поезд ФП, МП и ещё какого-нибудь полного-П. Это ж ежу понятно!
O>>биндинг в плюсах покрывает делегаты, а вот обратного нет, т.к. теже функторы это лишь одно из множества, и не потому, что не хватает, а потому, что еще и так можно. G>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
Ну, делегаты C# 1.0 не были реализованы на C++ в ~2001-2003 годах только ленивыми. В итоге всё же остановились на boost-овской реализации.
O>>т.к. хочется сделать красиво, а не можется G>Красиво это как? Нафигачить шаблоков? G>И как на плюсах сделать красиво IoC-контейнер?
Какой именно? В смысле — под какое использование?
G>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код. O>> возможность перегружать это от бедности? G>Нет, примерение этой возможности — от бедности. G>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.
Значит, если отсутствующую фичу реализовали средствами языка — это, типа, недостаток языка. Ясен пень — язык будет плох до тех пор, пока в него не будет прямо включено всё-всё известное на данный момент во всех доступных комбинациях. А то не ровён час — библиотеку писать придётся. Логика жжот напалмом! Сила слова, да.
O>>>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так) G>>>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы. O>> ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком G>Менеджед С++ вам не поможет, он интеропа между дувумя бинарями не добавляет.
Конечно, поскольку он сам — интерфейс к .Net.
G>COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.
Какая ещё дилемма? C++ плохо интеропится с C++-ными либами при несогласованном ABI. Проблема и понятна, и решена в большей или меньшей степени. Через старый добрый C-интерфейс он прекрасно связывается с чем угодно.
Кстати, а две виртуальных машины .Net (в смысле — два активных экземпляра .Net FW) разных версий свяжутся друг с другом "естественным" порядком? Или тоже с бубном и интеропом поплясать надо? А .Net с Java естественно стыкуются?
O>>>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее G>>>За последние 5 лет какое развитие было? O>> фреймворки ж) G>Мы про язык\стандартную библиотеку.
Загляни в boost — там ответ на вопрос по стандартной библиотеке. А то, что сам язык за 5 лет не поменялся — так это очень даже хорошо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, gandjustas, Вы писали:
G>Никаких средств разрабтки без XNA не нашел.
Неудивительно. Просто так с куста никто тебе девелопить ничего серьезного не даст.
XBOX Devkit и SDK выдаются тока по договору с МС.
G>Видится мне что на XBox игры только на XNA, а соовественно .NET\C#
Неправильно видится.
G>Игр таких много — http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
Неужто ты и вправду думаешь, что кто то будет переписывать на ХНЮ такие С++ игры как Bioshock, Assassin's Creed, COD, TES, FEAR и т.п.?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, gandjustas, Вы писали:
Х>>я вот призадумался, ты или не знаешь что такое движок, или толком не понимаешь что такое XNA, или ты так далёк от игростроя что почитав "интернеты" придумал свой мир где дотнет захватил игрострой :-D G>Я отлично знаю что такое движок
Да вот что то не бросается в глаза.
G>даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.
Угу, ясно.
Х>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA. G>Да ну. И на чем ты напишешь игру для XBox 360?
На С++ и XBox 360 SDK, которую надо по договору получить у МС. Не бесплатно разумеется.
На шарпе можно говнокодить под ХНЮ, которая суть бесплатный конструктор "налабай дома тетрис".
Чуть что посерьезнее — быстро упрешься в лимиты железа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, romangr, Вы писали:
R>Здравствуйте, catBasilio, Вы писали: B>>неиспользуемые объекты будут держаться до заврешения программы. B>>И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его. B>>P.S. это высосанный из пальца пример, но проблему он показывает вполне.
R>Этот высосанный из пальца пример показывает, что ты не знаешь ни c#, ни то как работает gc.
Я, кстати, проверил только что. Есть приложение на WPF, вбил следующий Main:
public static void Main()
{
var d = new Test[1000000];
for (int i = 0; i < d.Length; i++)
{
d[i] = new Test();
}
d[23].F = 23;
d[230].F = 23;
MyApplication app = new MyApplication();
app.Run();
}
Test — простой класс с двумя-тремя свойствами, который в финализаторе показывает MessageBox.
Запустил в debug — массив жил на протяжении работы приложения.
Запустил в release, но из под Студии — массив жил на протяжении работы приложения.
Запустил в release просто из Проводника — объекты массива d начали собираться GC еще на этапе загрузки главного окна приложения.