【问题标题】:ServiceBase.Run and memory spaceServiceBase.Run 和内存空间
【发布时间】:2014-03-07 15:21:44
【问题描述】:

我正在启动一项服务,一切都很好。 但是我脑子里有个问题

当我跑步时:

ServiceBase.Run(ServicesToRun.ToArray());

我想我必须首先说,ServicesToRun 列表是对象的集合,它们都派生自 ServiceBase 类,它们都为不同的客户端执行“相同”的任务。

每一堂课,顺利开始。 到目前为止没有问题。 但我的问题是。

ServiceToRUn 的每个实例都有自己的内存空间吗? 作为数组中的服务,有一些静态变量(并且不能更改)

如果它们不在不同的内存空间上运行,我可以通过启动“包装”: a) 进程(使用 .exe) b) 启动一个 svchost(如果我知道如何正确启动它)

b) 可能吗?

谢谢

【问题讨论】:

  • 在一个wild 猜测您是在谈论以某种.NET 语言实现的Windows 服务。请重新考虑标签并编辑您的问题,以向人们提供有关您所谈论的技术的线索
  • 感谢您的指点。完成

标签: c# .net windows memory service


【解决方案1】:

ServiceToRUn 的每个实例都有自己的内存空间吗?

是的。就像类的每个实例都有自己的内存一样。

不,因为它不会启动其他进程。它只是指示服务启动。

b 是可能的 - 不知道为什么你会打扰,因为现代服务器有多少内存。请注意,最后没有什么可以优化内存消耗。多 exe - 多服务主机 - 由于运行时内存分配较高(每个进程一个),效率较低。

最后我什至质疑为什么你有多种服务。你说每个客户一个 - 这闻起来像是“没有提供可以处理多个客户的服务”。

【讨论】:

  • :) 感谢您的回答。我错误地使用了客户端这个词,实际上是在启动一个调度程序(Timer 类的实现),它将为不同的数据库提供服务。因此,据我了解您的回答,我不必包装任何东西来创建 .exe 或使用 svchost 作为静态变量(当它们从数据库中读取时)不会在每个实现上相互冲突或覆盖服务基地。我的理解正确吗?
  • @"因为每个类的实例都有它自己的内存"。实例数据是的。静态的东西将被共享。 OP 明确询问静力学。 -1
  • ow.... 所以静态内容将被覆盖 :( ... Time to wrap?最佳选择?a) 将 Timers 转换为 .exe ?并从创建过程开始? b) 启动 svchost 并使用 .dll
  • c:去除静电。服务基本上是用糟糕的方式编写的 - 修复它。
  • 正如我所说...静态不能像涉及的大量代码一样被删除。感谢您的回答
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 2019-09-14
  • 2013-09-11
  • 2014-06-10
  • 2012-02-03
  • 2017-11-16
相关资源
最近更新 更多