Я считаю, что это вопрос WCF, но, возможно, он также связан с Azure.У меня есть проект WCF, который выполняет несколько сценариев железного питона.Я хотел бы сохранить кэш скомпилированных сценариев, чтобы их не нужно было каждый раз перекомпилировать.
Когда эти сценарии запускаются в первый раз, иногда они могут занять 2 или 3 секунды.Однако при следующем запуске они будут выполнены всего за несколько миллисекунд.Я хотел бы кэшировать исходный код скрипта, чтобы он был скомпилирован только один раз, а затем повторно использован для всех, кто использует мой сервис.В настоящее время все мое поведение службы создается каждый раз, когда кто-то подключается к моей службе.Есть ли способ, чтобы мой объект ScriptCache был постоянным на протяжении всего жизненного цикла приложения?
Ниже приведен пример кода, с которым я играю.
[ServiceBehavior]
public class Foo: IFoo {
ScriptEngine engine = Python.CreateEngine();
Dictionary<string, ScriptHost> ScriptCache = new Dictionary<string, ScriptHost>();
public fooBar doSomething() {
...
for (int editIndex = 0; editIndex < Edits.Count; editIndex++) {
ScriptHost mCurrentScript;
if (!ScriptCache.TryGetValue(Edits[editIndex], out mCurrentScript)) {
mCurrentScript = new ScriptHost(LoadScriptFromStorage(Edits[editIndex]), Edits[editIndex], engine);
ScriptCache.Add(Edits[editIndex], mCurrentScript);
}
mEditTimer.Start();
mCurrentScript.runScript(mCurrentObj);
mEditTimer.Stop();
WriteToLog(mJobID, "Edit: {0}\tTime: {1}", Edits[editIndex], mEditTimer.Elapsed.TotalMilliseconds);
mEditTimer.Reset();
mEditTimer.Start();
mCurrentScript.runScript(mCurrentObj);
mEditTimer.Stop();
WriteToLog(mJobID, "Edit: {0}\tTime: {1}\t2nd run", Edits[editIndex], mEditTimer.Elapsed.TotalMilliseconds);
mEditTimer.Reset();
}
}