小编rik*_*koe的帖子

ConditionalWeakTable <TKey,TValue>应该用于非编译目的吗?

我最近ConditionalWeakTable<TKey,TValue>在我的搜索中遇到了一个IDictionary使用弱引用的类,正如这里这里的答案中所建议的那样.

一篇明确的MSDN文章介绍了该类,并指出:

您可以在System.Runtime.CompilerServices命名空间中找到类.... 它在CompilerServices中,因为它不是通用字典类型:我们打算只让编译器编写者使用它.

然后再说:

...有条件的弱表不是一个通用的集合...但是如果你正在编写自己的.NET语言并且需要公开将属性附加到对象的能力,你一定要查看条件弱表.

与此一致,该类的MSDN条目描述如下:

使编译器能够将对象字段动态附加到托管对象.

显然它最初是为了一个非常特定的目的而创建的 - 帮助DLR,System.Runtime.CompilerServices命名空间体现了这一点.但它似乎发现了更广泛的用途 - 即使在CLR中也是如此.例如,如果我在ILSpy中搜索ConditionalWeakTable的引用,我可以看到它在MEF类和内部WPF 类中使用.CatalogExportProviderDataGridHelper

我的问题是在编译器编写和语言工具之外是否可以使用ConditionalWeakTable,以及在未来的.NET版本中是否会产生额外开销或实现变化的风险.(或者应该避免使用像这样的自定义实现).

另外也进一步阅读这里,这里这里有关如何ConditionalWeakTable利用一个隐藏的CLR实现的ephemerons(通过System.Runtime.Compiler.Services. DependentHandle)来处理键和值之间的周期问题,以及如何能够不容易在一个自定义的方式来完成.

c# clr garbage-collection weak-references ephemeron

32
推荐指数
1
解决办法
4736
查看次数

Stomp.js已过时且不再维护 - 哪个Stomp客户端与Spring Websockets一起使用?

我发现Spring WebSocket支持的当前文档指示用户使用stomp.js进行客户端JavaScript实现,这让我感到惊讶.

这个项目,在它的GitHub页面上的自述文件中说:

该项目不再维护.

如果您遇到错误或需要增强功能,您可以分叉并修改它,因为项目在Apache License 2.0下.

自2015年9月以来,该存储库没有任何提交(这只是为了将上述内容添加到自述文件中),并且自2014年12月以来没有代码提交,因此在过去的两年中它已被有效地放弃.

我不确定该存储库的284个分支中的哪个将是该库的稳定和最新版本,并且似乎没有可行的替代方案来自Google搜索.

有人可以推荐一个可以替代使用的稳定替代品吗?

理想情况下,我希望Spring团队能够为正确的客户端库提供一些指导,以便与他们的STOMP支持一起使用.

spring stomp websocket spring-websocket java-websocket

13
推荐指数
2
解决办法
5118
查看次数

使用Enterprise Library 4.1从多个进程记录到同一文件

我有几个并发运行的进程,我想要登录到同一个文件.

我们一直在使用Enterprise Library 4.1 Logging Application Block(带有a RollingFlatFileTraceListener),它工作正常,除了它在两个进程同时尝试写入日志文件时为日志文件名添加GUID这一事实(a System.Diagnostics.TextWriterTraceListener我相信的怪癖).

我尝试了各种各样的事情,包括Logger.Writer.Dispose()写入日志文件后调用,但每次写入日志条目时都不适合进行阻塞调用.

EntLib论坛建议将MSMQ与分销商服务一起使用,但这不是一个选项,因为我的公司不允许使用MSMQ.

有没有其他方法可以快速轻松地从多个线程/进程登录到同一个文件?

c# logging multithreading enterprise-library

8
推荐指数
1
解决办法
8699
查看次数

WPF TabControl - 当TabItem可见性更改时选择不同的选项卡

我有一个TabControlUserControl一个视图模型的支持,以及Visibility标签项目之一,必将对视图模型的属性.

<TabControl x:Name="myTabControl">
    <TabItem Header="Tab 1" />
    <TabItem Header="Tab 2" Visibility="{Binding HasData, Converter={StaticResource boolToVisibilityConverter}}"/>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

VisibilityTabItem变化,它缩短(隐藏)的TabItem报头,但是它继续显示其内容.

我想TabControl,以切换到可视选项卡时,其他选项卡是隐藏的,并且有点惊讶地发现,它不会自动发生.

将事件处理程序附加到节目的SelectionChanged事件上TabControl,TabItem.IsSelected(和TabControl.SelectedItem)在TabItem.Visibility更改时甚至不受影响(这是一个错误吗?!).

我试过了两个属性触发器:

    <!-- This doesn't compile because of TargetName on the Setter, think you can only use it in Control Templates.
         I don't know how to refer to the parent TabControl from within the TabItem …
Run Code Online (Sandbox Code Playgroud)

wpf

8
推荐指数
1
解决办法
6998
查看次数