从另一个进程访问对象

时间:2013-03-12 06:37:22

标签: c# .net xna shared-memory

我正在制作一个XNA游戏,我常常在不重建整个游戏应用程序的情况下测试无法编辑的内容(编辑和继续不起作用)。到达我实际测试的时间可能需要一些时间,因为游戏需要加载其资源。

我想做的是能够将资源加载到某些支持应用程序并以某种方式从游戏应用程序访问它们,从而无需在大多数时间重新加载游戏资产。是否有可能在.Net应用程序中,或者我应该知道其他一些方法吗?

我的XNA游戏在很大程度上依赖于Texture2D个实例,特别是一个包含多个Dictionary<string, Texture2D>个对象的库类。

我认为我希望能够在游戏应用中直接访问支持应用中的词典。 XNA游戏只能针对32位平台,我希望支持应用程序是64位,因此它可以容纳超过1(.5)千兆字节的资源数据(如果可能的话)。


单元测试方法(或任何暗示不使用某些资源的方法)在这种情况下对我不起作用,因为我正在开发视觉效果,它涉及我拥有的每一个纹理。

4 个答案:

答案 0 :(得分:2)

如果要卸载重新加载已编译的 dll充满资源,那么您可能需要查看应用程序域。即你可以用它卸载和重新加载组件。但是你必须通过“代理”访问他们的内容。您无法直接卸载程序集,这就是您需要域的原因。

这个想法是加载永不关闭的主应用程序。然后你有一个单独的Game.dll,你在自己的应用程序域中加载。然后,在主应用程序中加载所有资源。因此,您需要为游戏创建一个“代理”界面来获取资源,但这应该是可行的。

关于这一点的好处是你停止你的game.dll,重新编译它,重新加载程序集并为它提供仍然加载的资源。

一条可能的路线。

答案 1 :(得分:0)

如果您希望为您的资源提供动态提供程序/服务器,那么您有很多可能性。使用C#,您可以使用f.e. WCF提供您的资源。但如前所述,也许您应该尝试将设计解耦,以便实际使用单元测试而不是开始整个游戏。

http://en.wikipedia.org/wiki/Unit_testing

答案 2 :(得分:0)

为什么不使用WCF命名管道?

使用WCF server将您的应用设为named pip并提供 设置(字符串spriteName,Texture2D纹理)

会改变纹理..

答案 3 :(得分:-1)

这一切都取决于您希望在运行时加载哪种类型的资源。如果您只想测试纹理/声音资源,那么可以使用Texture2D.FromFileSoundEffect.FromStream(必须是PCM波形文件)方法来解决这个问题。但是,如果要动态加载模型,则需要额外的工作量。适应这个sample应该能够实现你所需要的。