我們有一個Web應用程序,它必須在給定的時間內執行數十或數百個工作流程。很多時間花在後,我們知道性能瓶頸是工作流程的deserialising(我們保留在數據庫中的XAML):我應該重用一個工作流定義嗎?
ActivityXamlServices.Load(xamlReader, activityXamlServicesSettings);
所以我們正在考慮緩存工作流(生成的活動對象通過Load方法返回)。這似乎有點提高了性能。我能看到的唯一可能的問題是活動(來自工作流定義/樹)將在工作流實例之間重用。因此,如果某個活動在一個實例中更改了狀態,它可能會更改另一個正在運行的實例的行爲。
注意:工作流程變量似乎並未在工作流程實例之間共享。
編輯:類似的東西被問:Workflow 4 runtime compiling。問題所有者似乎已經達到了「緩存DynamicActivity」(由Load方法返回的活動)的相同解決方案。
雖然這緩存似乎很好地工作在我們的系統到目前爲止我們希望沒有邊緣的情況下的問題。我擔心的是,活動對象(在加載工作流時創建)在工作流實例之間重複使用,如果活動具有狀態,則這可能是一個問題(一個實例可能會改變另一個的行爲)。 – Valentin
從反序列化XAML文檔獲得的活動對象只是您工作流程的藍圖。它不包含正在運行的工作流程的「狀態」信息。所以你會很好地緩存該活動對象以便重複使用。我會更新我的答案以反映這一點信息。 – ajawad987
我還沒有看到任何提到在官方WF文檔網站上的藍圖。你有任何代碼或官方文檔鏈接?我在我的自定義活動中使用日誌記錄觀察到的情況是,它有時會創建自定義活動的新對象,但有時會重用它們以用於不同的工作流實例。我覺得有一個模式,但仍在調查。 – Valentin