은 (이것은 내가 .NET이 돼지라고 징징과 이유 구걸, 일반 가정 문제 될 운명이되었다. 그것은 정말 내 특정 응용 프로그램에 대한 질문이 될 운명이되지 않았습니다.).NET에서 왜 CPU를 많이 사용하는 이유는 무엇입니까?
은 현재 내가 C#에서 오래된 C++ 코드를 다시 작성합니다. 우리는 모든 레거시 응용 프로그램을 포팅하고 있습니다. MAX 3 % CPU를 사용하는 C++ 응용 프로그램이 있습니다. 대부분 그들은 아무 것도 사용하지 않습니다. 그런 다음 코드를 가져 와서 복사하여 붙여 넣은 다음 C# 구문 및 .NET 라이브러리로 다시 포맷하고 BAM! 50 % CPU. 이것에 대한 이유는 무엇입니까? 나는 처음에는 JIT라고 생각했지만, 각 코드 경로가 연습 된 후에도 모든 것이 JIT ed, 같은 문제였다.
나는 또한 엄청난 메모리 증가를 발견했습니다. 풀로드를 실행하는 9MB의 응용 프로그램은 이제 10MB에서 시작하여 50MB에서 실행됩니다. 하드웨어가 저렴하다는 것을 알고 있지만, 원인을 이해하고 싶습니다. 그것은 알람에 대한 원인인가, 아니면 .NET에 불과합니다.
업데이트 1 답변
내가 C#을 익숙 스키트합니다. 나는 Linq에게 물건을 바꾼다. 필자는 일반적으로 코드를 사용하여 줄 수를 줄이는 등의 작업을 수행합니다. .NET에서 C++ 사용자가 저의 잘못에 대해 더 많은 예제를 제공 할 수 있습니까? 다음과 같이
이것은 일반적인 질문이 될 운명이되었다 2
업데이트,하지만 문제가있는 특정 응용 프로그램입니다.
paradox db에서 데이터를 가져 오기 위해 ODBC 드라이버를 사용하는 스레드가 있습니다. 그런 다음 Linq를 사용하여 이것을 SQL db로 변환하고 게시합니다. ANTS 프로파일 러를 통해 실행했으며 데이터 채우기 시간이 가장 많이 걸리는 것으로 보입니다. Linq 게시가 뒤따라. 내 영역 중 일부는 반사 사용법을 알고 있지만이 작업을 수행하는 방법을 알지 못합니다. 내 문자열을 문자열 빌더로 변경할 계획입니다. 이 둘 사이에 어떤 차이가 있습니까?
ConvertTo.Int32(datarow["Index"])
(int)datarow["Index"]
및
나는 형식 문자열에 모든 문자열 연결을 변경했습니다. 그것은 머리를 줄이지 못했습니다. 데이터 판독기와 데이터 어댑터의 차이점을 알고있는 사람이 있습니까?
이론적 인 예제가 필요한 대신, 프로파일 러를 사용하여 응용 프로그램이 CPU를 소비하는 이유와 위치를 확인하는 것이 좋습니다. – ChrisW
소리가 ODBC와 상호 작용하는 것 같습니다. 사용할 수있는 "기본".NET Paradox 드라이버가 있습니까? –
CPU 사용 시간은 50 %입니까? 무슨 일로? 연구 한 CPU 중심의 미니 벤치 마크에서 C++은 C#보다 빠르지 만 많이 사용하지는 않았습니다. 각각의 경우에 나는 최고의 처리량을 얻기 위해 CPU를 포화 상태로 만들었습니다. – Cheeso