我有一个用c#开发的类库,它具有如下所示的类似内容。它具有一个类ClassLib
。它具有一个公共变量somevariable
和2个方法。一种方法将值分配给该变量,另一种方法使用该变量。
class ClassLib
{
public string somevariable;
public void SomeMethod1()
{
somevariable = "someData";
}
public void SomeMethod2()
{
string finalValue = somevariable;
}
}
现在我有2个不同的Windows服务,其中引用了该类库。
在 Windows服务1 中,它具有一些类似的代码。
public class Application1
{
public void AppMethod1()
{
ClassLib c1 = new ClassLib();
c1.somevariable = "Application 1 Data";
c1.SomeMethod2();
}
}
此类正在将值分配给公共变量,并调用第二种方法来使用它。
Windows服务2:
public class Application2
{
public void AppMethod2()
{
ClassLib c1 = new ClassLib();
c1.SomeMethod1();
c1.SomeMethod2();
}
}
这将同时调用这两种方法。
这两个Windows服务连续运行。因此,我的问题是,如果两个服务同时运行并引用类库中的同一类,将影响somevariable
的值。由于一个应用程序正在分配值,而另一个正在尝试使用SomeMethod1
中的现有值。
换句话说,在WindowsService2中,当调用c1.SomeMethod2()
时,在任何时间点somevariable
的值是否都是"Application 1 Data"
?这些值会重叠吗?
答案 0 :(得分:1)
不。每个Windows服务都作为自己的进程运行,这意味着它具有自己的堆。因此,即使两个服务引用相同的DLL,也没有共享内存。
有多种方法可以创建在进程之间共享的数据,但前提是代码需要执行一些不寻常的操作。普通变量不共享。