Visual Studio 2012 - odchudzenie projektu

Witam,

przede wszystkim mam nadzieję, że pytanie jest jednak w dobrym dziale - jeśli nie, proszę o info bądź moderatora o przesunięcie.

Dotąd programowałem (jeśli chodzi o C++) albo na linuxie, albo na windowsie w Dev-C++ - tu i tu korzystając z kompilatora gcc. Teraz jednak mając dostęp do legalnego Visual Studio w wersji 2012 (bądź też starszej) odkrywam powoli jego wady i zdarzające się zalety, np. fajny edytor “windows forms application”. Moim podstawowym problemem jest objętość wygenerowanego projektu - prosty Hello World ma 37 MB, a folder z projektem ma tryliard plików, przy czym źródło .cpp od .exe dzielą chyba 2 czy 3 przejścia między katalogami.

Moje pytanie - jak to odchudzić, by wygenerowany projekt miał maksymalnie mało plików (zarówno jeśli chodzi o aplikacje tekstowe clr, jak i o okienkowe), czyli tylko te potrzebne, i zajmował rozsądną ilość miejsca? Dla porównania taki głupi mały projekt z plikami kompilacji w gcc zajmuje 5 KB + 1.36 MB .exe.

Duży exe bo pewnie kompilujesz jako Debug zamiast release sam się na tym złapałem jakiś czas temu :slight_smile:

http://social.msdn.microsoft.com/Forums/en-HK/csharpide/thread/37fe11c4-fef3-41f9-97a1-268ba8609ffa

Na końcu tego wątku masz podane czego szukać co prawda w Visualu C# 2010, ale zasada będzie ta sama.

To coś baaardzo sknociłeś. Jak żyję i programuję w Visual Studio w życiu mi nie skompilowało tak wielkiego programu. I to nie ma aż takiej różnicy czy debug czy release - kilka kilobajtów może. Zobacz czy przypadkiem nie zlinkowałeś w tym programie wszystkiego co się da.

Rzeczywiście Visual tworzy dość spore dodatkowe pliki.

Nie wiem jak jest w 2012 ale opowiem co możesz zrobić w 2010 bo taki mam :wink:

Jak już zakończysz pracę nad daną solucją (bo wcześniej nie ma sensu) to:

  • [*:1cqaz6dw]w katalogu solucji możesz usunąć plik bazy IntelliSense o nazwie takiej jak solucja z rozszrzeniem .sdf[*:1cqaz6dw]możesz też usunąć katalog ipch[*:1cqaz6dw]oprócz tego możesz jeszcze usunąć katalogi Debug i Release w katalogach projektów [*:1cqaz6dw]w sumie w katalogu solucji też możesz usunąć Debug czy Release jeśli Ci nie potrzebne :wink:

Po następnym budowniu solucji te pliki bedą z powrotem, dlatego opłaca sie to robić tylko po zakończeniu pracy.

Sam exe w katalogu Debug bądź Release ma koło 100 KB i to jest najmniejszy problem :wink:

Mam w zwyczaju trzymać projekty w katalogu synchronizowanym z chmurą, więc wolałbym, by projekt od razu tworzył się mniejszy. No i, co pewnie ma związek, samo utworzenie projektu i kompilacja są kilkakrotnie dłuższe niż używając dev-cpp.

I tu się z Tobą zgadzam - dlatego proszę o pomoc :wink:

Napiszę, co po kolei robię, by uzyskać wynik 30 MB, i byłbym wdzięczny za info, co konkretnie knocę (i wersja 2012/2010 nie ma tu znaczenia, bo mam dostęp do obu i jest w zasadzie tak samo):

Dev-Cpp czy kompilowanie przez G++ z linii komend nie tworzy bazy danych IntelliSense(czy innego podpowiadania składni), która przez to, że jest optymalizowana pod kątem szybkości dostępu, może mieć dość duży rozmiar.

Precompiled Headers(stdafx.h, .pch) też trochę zajmują - można je wyłączyć w opcjach projektu, ale odpowiednio wykorzystywane przyspieszają kompilację dużych projektów.

Tworzysz projekt CLR - integracja natywnego języka z opartym o CLR też trochę kosztuje(zarówno czasu kompilacji jak i pamięci - indeksowane są wszystkie referencje do bibliotek CLR, przez co dodatkowo rośnie baza danych IntelliSense, a i pliki PCH mają więcej rzeczy do pomieszczenia).

VS zachowuje skompilowane wersje poszczególnych plików źródłowych, dzięki czemu nie trzeba ich zawsze kompilować.

VS domyślnie generuje informacje dla debuggera i masę logów.

Jeśli nie używasz CLR nie ma sensu tworzyć projektu pod .NET, natywny wystarczy(będzie mniejszy). Trzeba się też przyzwyczaić, że to nie jest IDE pokroju Dev-C++, tylko potężna kobyła, która musi coś poświęcać, by ta funkcjonalność działała sensownie.

VS w wersji Express jest dostępny za darmo dla każdego przynajmniej od wersji 2005 :wink:

Ok, tylko w żaden sposób nie pomaga mi to, co napisałeś, w osiągnięciu celu - tworzenia projektów tak, by były rozsądnych rozmiarów.

To rozsądne rozmiary. Po prostu to jest za duże IDE, by można było to ograniczyć do kilku KB(co nie zmienia faktu, że generowanie PDB, PCH i logów można wyłączyć, przechowywanie skompilowanych OBJ pewnie też, ale od tego jest Google/Bing i MSDN by zobaczyć jak - wymaga to trochę grzebania w konfiguracji, czego mi się robić zwyczajnie nie chce, bo jest zbyt proste do znalezienia w dowolnej wyszukiwarce).

Od trzymania kodu są systemy kontroli wersji(Git, Hg, czy nawet SVN, można z powodzeniem zsynchronizować z chmurą) i tego bym zaczął używać. Ewentualnie możesz nie synchronizować całego folderu projektu, tylko wymagane pliki - .sln, .vcxproj itp.

No dobra, poradziłem sobie z największymi plikami na 2 sposoby:

  • przeniesienie pliku .sdf i folderu ipch do katalogu temp windowsa (http://paweln66.wordpress.com/2011/04/03/dlaczego-visual-studio-tworzy-folder-ipch-i-plik-sdf/). Dzięki temu VS korzysta z tych swoich wszystkich plików, tyle że są w osobnej lokacji i nie synchronizują się z chmurą, a ich strata zasadniczo nie szkodzi, bo wygenerują się na nowo przy kolejnej kompilacji.

  • przy tworzeniu projektu opcjonalnie zamiast nowej aplikacji konsoli CLR tworzę nowy pusty projekt, do którego dodaję plik źródłowy .cpp.