2011-09-03 8 views
9

GC.KeepAlive()をどのように使用するのですか?GC.KeepAlive()をどのように使用するのか、どのような目的のために

iソケットを使用して端末(Windows-CE)からサーバーにファイルを転送します。

転送が必要な時間は8分です。 (タッチスクリーンが押されていない場合)5分のWindows 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

wins on unamangedと仮定するとよいかもしれません。それでキープアライブは助けになりますか? – Zenwalker

11

あなたは非常にまれにGC.KeepAliveを使用する必要がないシャットダウンにシステムを防ぐコードを追加し、Windows CEの上で実行されているサービス/アプリケーションでありますまれです。ファイナライザの副作用があまりにも早く起こるのを防ぐために使用します。私はたいていMutexのためにそれを見てきました - アプリケーションの終わりまでmutexを生かして、インスタンスが1つしかないことを確認してください。実際には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が続く)の設定を調整することで、パワーマネージャのタイムアウトを好みに合わせて変更することができます。

ベストの「ソリューション」は、アプリの要件、ユーザーの要件、ターゲットデバイスの電源管理システムによって異なります。

関連する問題