2012-02-28 86 views
4

我遇到了Windows窗體(.net 4)應用程序的問題。我們的一個客戶希望從網絡共享中運行它(我們的應用程序可以同時被20-300個用戶使用)。我們可以把它加入這一行工作的app.config從網絡共享運行的.net應用程序的性能問題

<loadFromRemoteSources enabled="true" /> 

這需要時間來啓動該程序,並經過一段時間的用戶可以正常工作。不幸的是,他們注意到,當應用程序未被使用一段時間並且他們想再次使用它時,響應非常緩慢(「喚醒」應用程序大約需要1-3分鐘)。至少這是我從我們的顧問那裏聽到的。

我可能會看到它自己下週一,但首先我想知道:

  1. 這種行爲是正常的,如果是這樣,爲什麼呢?
  2. 我應該使用哪些工具來調查此問題?
+0

需要多久才能從本地磁盤「喚醒」應用程序? – 2012-02-28 23:32:08

+0

當應用程序安裝並在客戶機上運行時,我們沒有注意到這種行爲(凍結)。 – krolik 2012-02-29 16:00:05

回答

3

對於非託管exes,如果應用程序未被使用一段時間會被分頁。包含代碼的頁面會被丟棄,因爲它們可以從exe或dll重新加載。當您再次使用該應用程序時,它會被分頁,這需要一段時間。如果應用程序正在從網絡共享運行,則該分頁將通過網絡發生,並且可能非常緩慢。可以通過設置IMAGE_FILE_NET_RUN_FROM_SWAP標誌來避免(使用editbin /swaprun:net)。

C#應用程序有點複雜。 exe和dll仍然是內存映射的,但所有的代碼都是在運行時從IL生成的。這個JITted代碼將被分頁到本地頁面文件,但我想任何資源或元數據都將被丟棄,並按需從網絡中分頁。這可能是緩慢的原因。

但不是猜測,運行procmon,看看你的應用正在做什麼。

相關問題