2010-12-31 10 views
6

Me gustaría crear una DLL de biblioteca de clases en C#, que tendrá una clase estática en ella. Esa clase estática tiene 1 miembro estático privado (int), con una propiedad pública estática para él.Cómo crear una biblioteca C# que está cargada en la memoria una sola vez?

Lo que quiero es que para cada aplicación C# que haga referencia a esta DLL, obtendrá la misma clase estática.

Significado Si Application1 cambia el valor del miembro estático a ser 5, y luego Application2 trata de obtener el valor del hotel fenomenal, se conseguirá: 5.

A pesar de que esos son dos aplicaciones diferentes (EXEs)

En pocas palabras, quiero que toda esta biblioteca de clases sea "estática", , por lo que solo se cargará una vez en la memoria, y su único valor se compartirá entre diferentes EXEs que hacen referencia a él.

Gracias

+0

Tiene que guardar los datos en algún lugar de todos modos. Por lo que es posible que desee considerar el registro de Windows o el almacenamiento aislado para almacenar sus datos. –

+0

Se llama "servidor". Es un exe. Escribe el dll para hablar con el servidor. –

+0

Probablemente sería más útil si describiera el problema inicial que tuvo/le llevó a esta solución. En sus comentarios a la respuesta de chibacity, indicó que quería compartir objetos (no solo escalares simples como enteros). Esto realmente no va a funcionar bien. –

Respuesta

3

Una solución atractiva a los datos compartidos entre todos los procesos en el mismo equipo que se comparte memoria. Tendrá que volver a escribir sus propiedades para recuperar el valor compartido, y la clase se cargará varias veces en cada proceso que use su biblioteca, pero se comportará como si hubiera una sola copia, si lo hace correctamente.

Aquí es una pregunta StackOverflow para ayudar a empezar:

Se vincula a una biblioteca completa de memoria compartida que puede utilizar.

0

Soy Omer, me registré y parece que soy un usuario diferente.

Con respecto a lo que Damien_The_Unbeliever dijo, permítanme que describa lo que generalmente quiero hacer, para que pueda dirigirme hacia la mejor solución para ese caso.

He creado una buena aplicación. Esta aplicación tiene una GUI. Quiero agregar otra forma de operar esta aplicación, que será mediante la exposición de una API para ello, métodos y propiedades que otras aplicaciones pueden usar para operar mi aplicación.

Y lo que planeo hacer es: Crear un archivo DLL con una clase estática, poner el núcleo de mi solicitud de esa clase, y luego tener la interfaz gráfica de usuario, y potencialmente todas las demás aplicaciones, utilizar esa clase.

tenga en cuenta que esta clase llevará a cabo no sólo los datos que se pueden almacenar, sino también referencias a los objetos "en vivo" (es decir puertos coomunication abiertos, etc, etc), así almacenar en el disco, y la lectura de ella no lo hará ser una buena solución aquí. Necesito esta clase de 1 estática, para que se pueda acceder desde todas las aplicaciones que lo deseen, y que todas obtendrán la misma clase estática.

Entonces, necesito que esta clase sea estática, y necesito que la biblioteca sea "estática". (no existe tal cosa en .NET como "biblioteca estática", lo sé. Tenga en cuenta que no estoy hablando de una biblioteca estática como en C++, hay algo más ...Estoy hablando de un archivo DLL que se crea una sola vez, para todas las aplicaciones que lo usan).

+0

¿Es esta una respuesta a tu pregunta? Si no es así, y es solo un comentario, debe modificar su pregunta original con esta nueva información. – Dykam

+0

No puedo modificar mi pregunta original porque cuando me registré, me dio un nuevo usuario ... por lo que la pregunta original no está asociada a mí (el nuevo usuario), por lo que no puedo editarla. ¿cómo puedo asociarlo ahora? o está perdido? – Omer

+0

No puede tener una "instancia" estática de una DLL compartida en múltiples procesos en Windows. Tendrá que utilizar la comunicación entre procesos o la memoria compartida (ver otras respuestas) si desea comunicarse entre procesos. –

Cuestiones relacionadas