(To miało być ogólne pytanie hipotetyczne, mnie marudzenie, że .NET był świnią i prosząc o powodów. To nie było naprawdę ma być pytanie o mojej konkretnej aplikacji.)Dlaczego .NET używa tak dużo procesora, czy to jest problem?
Obecnie jestem przepisanie starego kodu C++ w języku C#. Przenosimy port do wszystkich starszych aplikacji. Mam aplikacje C++, które pobierają MAX 3% CPU. Przeważnie nie używają żadnego. Następnie wziąłem kod, skopiowałem i wkleiłem, a następnie ponownie sformatowałem do składni C# i bibliotek .NET oraz BAM! 50% procesora. Jaki jest tego powód? Początkowo myślałem, że to JIT, ale nawet po tym, jak każda ścieżka kodowa była ćwiczeniem, a cała sprawa była JIT ed, ten sam problem.
Zauważyłem również ogromny wzrost pamięci. Aplikacje, które zajęły 9 MB z pełnym obciążeniem, zaczynają teraz od 10 MB i działają z szybkością 50 MB. Rozumiem, że sprzęt jest tani, ale chcę zrozumieć, co to powoduje. Czy to jest powód do niepokoju, czy też .NET to tyle świni?
Update 1 Odpowiedź do rzutków
znam C#. Zmieniam rzeczy na Linq i tak dalej. Zazwyczaj biorę kod i zmniejszam liczbę linii i tak dalej. Czy mógłbyś podać kilka przykładów tego, co osoba C++ robi źle w .NET?
Aktualizacja 2
To miało być ogólne pytanie, ale specyficzna aplikacja, która ma ten problem jest następujący.
Posiada wątek, który używa sterownika ODBC i pobiera dane z paradoksu db. Następnie używa Linq do przekształcenia tego w SQL db i opublikowania go. Uruchomiłem to przez profiler ANTS i wydaje się, że wypełnianie zestawu danych zabiera najwięcej czasu. Następuje wysłanie Linq. Wiem, że niektóre z moich dziedzin są używane w odbiciu, ale nie widzę, jak zrobić to, czego potrzebuję bez tego. Mam zamiar zmienić mój ciąg na konstruktorów ciągów. Czy jest jakaś różnica między tymi dwoma?
(int)datarow["Index"]
i
ConvertTo.Int32(datarow["Index"])
zmieniłem wszystkie konkatenacji ciągów do ciągów wielkoformatowych. To nie zmniejszyło się ponad głowę. Czy ktokolwiek zna różnicę między czytnikiem danych a adapterem danych i zestawami danych?
Zamiast potrzebować teoretycznych przykładów, lepiej użyć profilera, aby sprawdzić, dlaczego Twoja aplikacja wydaje CPU. – ChrisW
Wygląda na to, że może to być interakcja z ODBC. Czy dostępny jest "macierzysty" sterownik .NET Paradox? –
50% procesora na jak długo? Do jakiego zadania? W intensywnych procesorowych mini-benchmarkach, które studiowałem, C++ był szybszy niż C#, ale nie za dużo. W każdym przypadku przesycałem procesor w celu uzyskania najwyższej przepustowości. – Cheeso