2011-09-03 1 views
9

GC.KeepAlive()을 어떻게 사용합니까?GC.KeepAlive()를 사용하는 방법과 용도에 따라

i Socket을 사용하여 터미널 (Windows-CE)에서 서버로 파일을 전송합니다.

전송해야하는 시간은 8 분입니다.

오분 (터치 스크린을 누르지 경우) 윈도우 CE의 셧다운

내가 이것에 대한 GC.KeepAlive()를 사용하는 경우 한 후, 내 문제를 해결입니까? .NET 용 MSDN 라이브러리 미리

+0

해당 API를 사용해 보셨습니까? WinCE가 관리되지 않는 코드이므로 MSDN에 따르면 사실이거나 작동 할 수 있습니다. – Zenwalker

답변

4

감사 :

킵 얼라이브 방법의 목적은 조기 위험에 개체에 기준의 존재를 확인하는

가비지 수집기에서 을 회수했습니다. 이 문제가 발생할 수있는 일반적인 시나리오는 개체가 관리 코드 또는 데이터에 대한 참조가 없을 때 이지만 개체가 Win32 API, 관리되지 않는 DLL 또는 COM을 사용하는 메서드와 같은 관리되지 않는 코드에서 계속 사용되고 있습니다.

이렇게하면 문제가 해결되지 않습니다. 실제로 그것은 당신의 문제와 관련이 없습니다. 매우 - 당신이 할 수 있는 유일한 방법은 한 전송이 진행되는대로

+0

wince stuffs는 ​​관리되지 않는 개체입니까? 그래서 MSDN 당, 그건 사실이 맞습니까? – Zenwalker

+1

Windows CE에서 실행 중이라고해서 그것이 관리되지 않음을 의미하지는 않습니다. CE 특정 장치에 사용할 수있는 전체 .NET 플랫폼이 있습니다. –

+0

그럴 수 있습니다. 그럼 Keepalive Wud가 도움이 될까요? – Zenwalker

11

당신은 아주 드물게 GC.KeepAlive을 사용할 필요가 없습니다 시스템 종료를 방지 코드를 추가, 윈도우 CE에서 실행되는 서비스/응용 프로그램에 드물게. 파이널 라이저의 부작용이 너무 일찍 발생하는 것을 막고 싶다면 이것을 사용하십시오. 난 가장 자주 사용 Mutex에 대한 사용 - 애플 리케이션의 끝까지 뮤텍스를 살아있는 단 하나의 인스턴스가 있는지 확인하십시오. 실제로 using 성명이 여기에 더 좋지만, 별개의 문제입니다.

아니요, 귀하의 상황과 관련이없는 것으로 들립니다.

+1

MSDN에서 wince는 관리되지 않는 개체에 있습니다. 그래서 msdn이 말한 것을 끈질 기게 만들려면 여기에 맞습니까? – Zenwalker

+1

@zenwalker : CE는 관리되는 코드와 네이티브 코드를 모두 지원합니다.하지만 어느 쪽도 당면한 문제와 관련이 없습니다. – ctacke

+0

COM 개체는 어떻게됩니까? – codea

0

전원 끄기 화면은 장치의 전원 관리 설정입니다. 어떤 앱이 실행 중인지 여부에 관계없이 문제가 발생합니다. GC는 이것과 전혀 관련이 없습니다.

전원 장치가 저전력 상태로 전환하는 것을 방지하려면 몇 가지 옵션이 있습니다. 앱에서 정기적으로 SystemIdleTimerReset으로 전화 할 수 있습니다.

전원 상태를 SetSystemPowerState과 같이 원하는대로 강제 설정할 수 있습니다.

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\Timeouts] (WM_SETTINGS_CHANGE 브로드 캐스트 IIRC 다음)의 설정을 조정하여 전원 관리자 시간 초과를 원하는대로 변경할 수 있습니다.

최상의 "솔루션"은 대상 요구 사항, 사용자 요구 사항 및 대상 장치의 전원 관리 시스템에 달려 있습니다.

관련 문제