Ich arbeite an einem Dot Net-Projekt, das eine DLL enthält. Diese DLL verwendet eine .lib (C-Code). Leider gibt es in dieser .lib viele statische Variablen. Das Problem habe ich hier:DotNet: Statische Variablen in DLL
Wenn zwei Benutzer gleichzeitig eine Suche durchführen, erhalte ich einen Fehler, da beide auf die .lib zugreifen, man ändert etwas während man versucht andere Daten zu lesen.
Die offensichtliche Lösung wäre, den Zugriff zu sperren, aber das möchte ich wirklich nicht, weil das den Suchprozess drastisch verlangsamt. Ich würde lieber versuchen, eine DLL aus der lib zu machen, aber ich weiß nicht, ob dies das Problem lösen würde, da ich nicht weiß, ob die statischen Variablen dann getrennt gespeichert werden oder ob beide Suchprozesse auf dasselbe zugreifen Variablen.
Hat jemand Erfahrung damit? Weil es ziemlich lange dauern wird, und ich würde gerne wissen, ob es funktioniert, bevor ich damit anfange.
Ich hoffe alles ist verständlich, da Englisch nicht meine Muttersprache ist, und meine Programmierkenntnisse sind ziemlich einfach.
Sie * sollten * übermäßige Verwendung von * statischen * Feldern vermeiden. Versuchen Sie, * Type * Design zu ändern. – adatapost
Das Problem ist, dass der C-Code voller Statik ist, es würde viel zu lange dauern, alles zu ändern. Die einzige schnelle Alternative, die ich atm sehe, ist diese DLL "Trick" zu versuchen. – Stefan
@Stefan: Definiere einen neuen Typ in einer neuen Assembly, die Zugriff auf diesen C-Code (und nur diesen) hat, also einen Wrapper dafür. Adn von diesem Typ, verwalten Sie exklusiven Zugriff auf C-Ressourcen in der gewünschten Weise. Wenn Sie also eine C-Funktion aufrufen wollen, müssen Sie diesen Typ verwenden, und wenn Sie etwas mitten in der Ausführung aufrufen, wird derselbe Typ Sie blockieren, eine Ausnahme auslösen, eine Nachricht anzeigen ... was auch immer. – Tigran