Я считаю, что это вопрос WCF, но, возможно, это также связано с Azure. У меня есть проект WCF, который выполняет некоторые скрипты из железа python. Я хотел бы сохранить кэш скомпилированных скриптов, поэтому им не нужно будет перекомпилировать каждый раз.Создать глобальный объект в проекте 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();
}
}
Спасибо! Это сработало отлично. Он действовал так, как будто весь класс создавался каждый вызов. Я решил (если это так), даже статические объекты были бы воссозданы. +1 ... спасибо за помощь! – Brosto