私は今、約1日半の解決策を探していますが、要点に到達できません. PocketPC 2003 で C# アプリケーションから *.lnk ファイルを開始しようとしました。この *.lnk ファイルには、PocketPC 用の JVM である evm.exe へのリンクが含まれています。渡される引数は (他に加えて) -Xms8M で、JVM に少なくとも 8MB のメモリを予約するように指示します。
Windows Explorer から直接起動する場合は問題ありません。
ここで、*.lnk ファイルを指すプロセスを C# で作成しました。起動しようとすると、JVM コンソールが開き、「EVM 実行履歴が大きすぎます」または「ヒープの初期化に失敗しました (フェーズ 1)」(またはそのようなもの) のいずれかのエラーが表示されます。
上記のパラメーターを削除すると、アプリケーションは問題なく表示されます。
この動作のため、新しく作成されたプロセスに割り当てられたメモリが少なすぎると思います。これは現実的ですか?そしてもし: 新しく作成されたプロセスにより多くのメモリを割り当てる方法はありますか? それとも、私は完全に間違っていて、別の方法で行かなければなりませんか (利用可能な場合)?
編集:
--CodeSnippet-
this.myStartProcess = new Process { StartInfo = { FileName = appName },EnableRaisingEvents = true };
this.myStartProcess.Start()
--CodeSnippet--
編集 2:
さらに調査を行った結果、実際の問題は、使用可能なリソースが非常に限られていることであり、時間の経過とともにランチャー アプリケーション (起動後、合計で約 1.8 MB) が消費されることが判明しました。
物事を改善するために、私は Windows Mobile でガベージ コレクターがどのように機能するかを研究し始め、2 つの手法を使用して仮想マシンを起動しました。1 つ目は、アプリケーションをバックグラウンドに送り (フォームのメソッド)、ガベージ コレクターが終了するのを待つ ( )
ことで、自分のアプリケーションが使用するメモリを減らすことです。
その後、VM を起動する前に、プログラム メモリで 9 MB の空き容量を探しています。十分なスペースがない場合は、必要なメモリをストレージ メモリからプログラム メモリに移動しようとします。SendToBack()
GC.WaitForPendingFinalizers()
この 2 つの手法により、大幅に改善されました。
ランチャー アプリケーションにはまだ問題があります。割り当てられたバイト (具体的には文字列とボックス化されたオブジェクト) は、ランチャー アプリケーションが前面にあると、時間の経過とともに増加します... 10 分で約 30 kb です。24 時間後に、デバイスは自動的に再起動します。現時点では、ランチャーは合計で約 10 分間前方にあると想定しています。それでも、メモリ リークが発生するのはよくありません。これを追跡する方法を知っている人はいますか?
よろしくお願いし
ます
マルセル