数据共享,静态变量和管道

时间:2014-07-22 22:20:54

标签: c# pipe data-sharing

我花了一天时间阅读有关如何在流程之间最佳地共享数据的文章/博客。我之前没有机会深入探讨这个话题,但我想知道你认为处理以下内容的最佳解决方案是什么。

我正在开发一个使用MEF绑定插件的应用程序。插件(主要是显示为MDI表单的表单)可以根据需要/提供的内容实现多个接口实现,大型机会检查它们是否已实现,然后满足其需求。 到目前为止,一切都很好,正常运行。

现在,如果您启动应用程序,它会要求有效登录(MainFrame),如果登录成功,则用户将存储在MainFrame中。 知道所有可用插件的PluginManager现在在激活时将用户传递到插件中。

这有效,但这是一个好方法吗?

我还考虑过让AppEnvironment类使用静态变量共享User,DataConn-Strings等几个信息。 应用程序使用了很多任务,因此我使用静态锁定对象保护了可能在运行时更改的静态变量。

我已经在这里读过静态变量很糟糕......这是真的吗?

我想到的另一件事是我可以使用管道在MainFrame及其子窗体之间共享信息...... 这有点过量吗?你喜欢/使用管道来满足这些要求吗?

请不要误解我,我不是在寻找一种简单的方法来存档我想要的东西,但我真的希望有一种优雅,优雅的方式来分享MainFrame及其ChildForms中的信息。如果我能学到新东西,甚至更好;)

感谢您的关注,非常感谢任何帮助:)

干杯 Keil的

1 个答案:

答案 0 :(得分:0)

问题:这有效,但这是一个好方法吗?

答案:对于简单的场景,它应该足够了。

在可扩展实施的情况下,要记住有关数据共享的一件事是“注意并防止对插件上下文中的大型机上下文数据进行未知或不需要的更改”

问题:我已经在这里看到静态变量很糟糕了......真的是这样吗?

答案:在我看来,不是它们并不坏,在处理多线程应用程序时应该小心处理。

锁定变量在某种程度上会有所帮助,在极少数情况下,我会建议您调查Interlocked课程以获得更多预防措施。

问题:我想到的另一件事是我可以使用管道在MainFrame及其子窗体之间共享信息......这不是有点过量吗?你喜欢/使用管道来满足这些要求吗?

答案:管道是进程间最快的通信方式之一。

案例研究:使用基于管道的WCF服务来获取每秒处理大量数据请求的两个Windows服务之间的数据。这是使用WCF在同一台机器上进行通信的两个服务最可行的选项。

我会赞同你的看法并说使用烟斗会有点过分。此外,想要在您的应用程序中加载的所有插件在技术上必须实现此功能,并将为这些插件添加更多可避免的代码来维护。

<强>总结 您可以遵循的最佳实例模式是Visual Studio SDK。我建议使用某种通常认可的命令或消息模式。双方都需要知道消息/命令实体以及对命令处理程序或信使的引用,这些命令处理程序或信使接受这些命令/消息。大型机和插件代码之间交互的受控通道将是一种前进的方式,并且仍然是可扩展的。