我有一個運行在IIS 7.0上的.net 2.0 web服務。首次調用Web服務很慢;由緊湊框架贏得應用程序
我消耗從緊湊架構書面申請(CF 2.0)該服務。 第一次通話需要13秒,所有後續通話都超快(1秒以內)。沒有數據被緩存。
任何想法如何解決這個問題?
我有一個運行在IIS 7.0上的.net 2.0 web服務。首次調用Web服務很慢;由緊湊框架贏得應用程序
我消耗從緊湊架構書面申請(CF 2.0)該服務。 第一次通話需要13秒,所有後續通話都超快(1秒以內)。沒有數據被緩存。
任何想法如何解決這個問題?
下一個應用CF第一呼叫是當所有代理都創建在設備上的對象。因此,即使服務器上的對象等已經啓動,每個設備的第一個呼叫也將比其他任何呼叫慢得多。
一個常見的解決方法是讓你的服務暴露了一些存根方法(如果你想讓它可以什麼都不做),當你的應用程序啓動時,產生一個工作線程調用此存根。這會在後臺爲您創建服務代理對象,因此當您的應用程序實際向服務發出呼叫時,所有事情都已準備就緒。
好的,這樣更有意義,謝謝! 一兩件事,我不明白,然後,就是每隔一段時間通話將需要更長的時間,然後一些快速調用,那麼在長時間的通話。這幾乎就像在瘦客戶端上運行的一個cron作業一樣,它刪除了代理對象。 – sarsnake 2009-09-08 22:58:39
我可以對這些代理對象進行一些控制嗎? – sarsnake 2009-09-08 23:16:39
我的猜測是,JITTted代理越來越顛簸必須重新即時編譯。遠程性能監視器可以驗證 - 在長時間通話之前查看是否在收藏中有音高。你真的沒有在代理對象的任何控制,他們需要得到建立,並像任何其他託管對象,代碼可如果GC認爲有必要,可以投。 – ctacke 2009-09-09 00:10:26
是它第一次調用所有的IIS後啓動,或者服務器啓動?
有史以來第一次調用IIS總是比較慢。我們曾經通過使用腳本在重新啓動時創建虛擬調用或IISRESET來解決它,以吸收第一次調用的懲罰。
第一個電話被加載.NET運行庫和JITting的Web方法調用。許多部署服務的商店並不是第一次真正在意,但是當他們這樣做時,他們會有一些東西打電話給它,作爲部署的一部分,以便第一次擺脫困境。另一種方法是NGEN吧。
請詳細說明。 1)它是否安裝在客戶端?網絡服務器? 2)如果在客戶端上,它是否適用於WinCE,CF 2.0? – sarsnake 2009-09-08 21:24:51
您將在服務器上執行此操作。您的服務器端的Web服務是ASP.NET 2.0,可能會執行重要的任務,例如從數據庫獲取數據等。在客戶端花費的時間很可能不多。同時檢查你的global.asax.cs文件,看看是否有任何設置例程在第一次請求時運行,並可能延遲其中的一些工作來分散工作。 – 2009-09-08 21:42:38
謝謝傑西,我現在把定時器。 – sarsnake 2009-09-08 22:11:04
而且,當應用程序被稱爲您運行的SQL連接打開的第一次。如果有網絡問題,這可能需要更長的時間。 應用程序閒置一段時間後,連接可能會自動關閉。
因爲我測試Web服務時使用不同的參數,當它很快,網絡連接似乎很好。正如我所說,沒有數據被緩存,所以如果網絡有問題,它會顯示每一次,不是嗎? 這似乎太巧合了。我想我錯過了一些東西。問題是什麼。 – sarsnake 2009-09-08 21:20:57
這是每個會話的第一個呼叫嗎?還是服務本身加載到內存後的第一個調用? – 2009-09-08 20:59:18
請參閱我對Traveling Tech Guy的回答的評論。 – sarsnake 2009-09-08 21:01:27
客戶端有什麼我應該讓它更快? – sarsnake 2009-09-08 21:07:22