Ich habe eine CLR-DLL (Quellcode in C# geschrieben), die in SQL Server geladen wird. Der Initialisierungsprozess ist teuer, also ist es etwas, was ich normalerweise nur einmal tun möchte. Es gibt jedoch Zeiten, in denen es erforderlich sein könnte, erneut zu initialisieren, und ich möchte SQL Server dazu nicht neu starten müssen. Als solche habe ich nicht markiert diese statischen Variablen als schreibgeschützt. Mein Problem ist, dass meine statischen Variablen auf scheinbar zufällige Weise auf null zurückgesetzt werden. Ich bin ziemlich sicher, dass ich keine Threading-Probleme habe und keiner meiner Code diese Werte auf null setzt. Wenn ich meine Protokolldateien analysiere, kann ich nur raten, dass SQL Server die Werte irgendwie auf null zurücksetzt (vielleicht wird die DLL manchmal neu geladen?). Führt SQL Server das aus? Wenn ja, gibt es eine Möglichkeit, es nicht zu konfigurieren?SQL Server CLR statische Variablen zurückgesetzt auf Null
Antwort
SQL Server lädt und entlädt CLR-Module nach Bedarf (unter Speicherdruck, im Falle einer nicht behandelten Ausnahme, more on it here). Selbst wenn Sie in der Lage wären, alle damit verbundenen Bedingungen und Timings zu verstehen, wird sich dies wahrscheinlich auch in zukünftigen Versionen ändern.
Größere Datenmengen werden nicht gut skaliert. Schreiben Sie einen Windows-Dienst dafür und rufen Sie ihn über tcp (z. B.) von Ihrer verwalteten UDF ab. Wenn Sie einen In-Process-Status benötigen, verwenden Sie einen permanenten Caching-Mechanismus anstelle von statischen Variablen (die Datenbank, das Dateisystem) - oder antizipieren Sie, dass Statiken jederzeit null werden können, und initialisieren Sie sie immer dann, wenn nichts passiert mit diesem Ansatz per se, abgesehen von der Skalierbarkeit Problem und Nebenläufigkeit/Synchronisation.
- 1. SQL Server CLR Speicherzuordnung
- 2. CLR SQL Server UDF Frage
- 3. Initialisiert gcc automatisch statische Variablen auf Null?
- 4. Punktzahl nicht auf Null zurückgesetzt
- 5. SQL Server CLR reservierten Speicher steuern
- 6. Wo speichert CLR statische Klassen?
- 7. CLR-DLL von SQL Server abrufen
- 8. sql server CLR-Skalarfunktion mit Standardspaltenname
- 9. Probleme mit CLR-Code auf SQL Server 2005
- 10. SQL Update auf NULL mit einer Variablen
- 11. SQL Server 2005 - Inhalt der Variablen auf
- 12. Zugriff auf statische Variablen
- 13. Warum werden statische Variablen automatisch auf Null initialisiert?
- 14. SQL Server 2008-Typen in SQL CLR gespeicherte Prozedur
- 15. SQL Server - Variablen Datumsbereich
- 16. Spalte auf "nicht Null" in SQL Server
- 17. Strom wurde zurückgesetzt: null
- 18. SignalR Variablen werden zurückgesetzt
- 19. Statische Variablen in WebApplication/WebMethods
- 20. Wie behebe ich diesen Fehler CLR in SQL Server räumlichen
- 21. SQL Server - Umgang mit Null-Eingabe in benutzerdefinierten CLR-Funktion (UDF) mit OnNullCall
- 22. MemoryStream in SQL CLR zu SQL
- 23. Synchronisieren Sie den Zugriff auf statische Variablen in SQL-Server SQLCLR
- 24. wie die CLR-Funktionen in SQL Server 2008 bereitstellen
- 25. SQL Server-CLR-Integration in einem Servercluster/Farmszenario
- 26. Dynamische Variablen in SQL Server
- 27. SQL Server - Verwenden der CLR-Integration zum Verwenden eines Webdiensts
- 28. Registrieren CLR-Funktion (WCF-basiert) in SQL Server 2012
- 29. C# SQL CLR kann Umgebungsvariable nicht lesen
- 30. Chef-Server-Passwort zurückgesetzt
Die Beschreibung ist fast das Gegenteil von dem, was eine SQLCLR-Funktion oder ein Aggregat sein sollte. Eine SQLCLR-Klasse wird im SQL Server-Speicherbereich ausgeführt, wobei das SQL Server-Threading verwendet wird. Der Lebenszyklus wird von SQL Server gesteuert. Daher sollte es * keine teure Initialisierung durchführen oder erfordern. Es sollte * überhaupt keine statischen Variablen haben. Es * sollte nicht * Speicher verschwenden, der zum Zwischenspeichern von Daten verwendet werden könnte. Mit anderen Worten, Sie haben Threading-Probleme, aber das sind wahrscheinlich die geringsten Ihrer Probleme –
Wo ist der Code und was versucht es zu tun? Warum benötigt eine SQLCLR-Assembly irgendeine Art von Initialisierung? Es ist unmöglich, ohne den Code zu helfen, abgesehen davon, dass SQLCLR-Klassen nicht so funktionieren sollen. –
Dieser Code wendet sich an den Schlüsselmanager, um kryptografische Schlüssel zu exportieren. Ich speichere die Schlüssel im Speicher, um den Schlüsselverwalter nicht wiederholt zu erreichen (weil das der teure Prozess ist). Leider darf ich keinen Code von diesem bestimmten Projekt posten. – Hmmmmm