请参阅以下并发性能分析,该分析表示并行foreach所完成的工作:

在循环内部,每个线程从DB读取数据并对其进行处理.线程之间没有锁,因为每个处理不同的数据.
由于未知原因,看起来foreach的所有线程中都存在周期性锁定(请参阅黑色垂直矩形).如果您看到所选的锁定段(深红色段),您将看到堆栈显示在StockModel.Quotation构造函数处锁定的线程.那里的代码只构造了两个空列表!
我在某处读过这可能是由GC引起的所以我已经将垃圾收集更改为在服务器模式下运行:
<runtime>
<gcServer enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)
我得到了一个小的改进(大约10% - 快15%),但我仍然有垂直锁定.
我还在所有数据库查询中添加了WITH(NOLOCK),因为我只读数据而没有任何区别.
有什么暗示这里发生的事情?
分析完成的计算机有8个核心.
编辑:启用Microsoft Symbol服务器后,所有线程都在wait_gor_gc_done或WaitUntilGCComplete等调用上被阻止.我认为启用GCServer我为每个线程都有一个GC,所以我会避免"垂直"锁定,但似乎并非如此.我错了吗?
第二个问题:由于机器没有内存压力(使用8个演出中的5个)有没有办法延迟GC执行或暂停它直到并行foreach结束(或将其配置为不经常发射)?
我正在使用VS2008调试C++应用程序,并且使用一些长选择查询,我无法在调试器中看到全文.它只显示查询的一部分.
有没有办法看全文?
提前致谢.

编辑:字符串中可用的真实查询是:
select c.cd_seq, m.diag_code, m.diag_descr, 'S' as source
from custom_booking_data c
left outer join meddiagnosis m
on c.cd_number_value = convert( decimal( 28, 8 ), m.diag_urn )
where c.custom_data_urn = 4 and c.cd_field = 433
union
select c.cd_seq, m.diag_code, m.diag_descr, 'H' as source
from custom_booking_data c
left outer join ordiagnosis m
on c.cd_number_value = convert( decimal( 28, 8 ), m.diag_urn )
where c.custom_data_urn = 4 and c.cd_field = 594
Run Code Online (Sandbox Code Playgroud)
如果你问我,不会那么久.
我想在我放在所有窗口上的所有控件上设置一个默认的3个边距,并且只能在很少的项目上覆盖这个值.
我已经看过一些像做风格的方法,但后来我需要设计一切,我更喜欢一些比所有控件都可以做到的事情.我已经看过像MarginSetter这样的其他东西,但看起来它不会遍历子面板.我只想在我放在窗口的控件上使用Margin,与视觉树的边框或其他东西无关.
看起来对我来说非常基本.有任何想法吗?
提前致谢.
我需要停止一个线程,直到另一个线程设置一个布尔值,我不想在它们之间共享一个事件.
我目前所拥有的是使用Sleep的以下代码(这是我想要更改的代码):
while (!_engine.IsReadyToStop())
{
System.Threading.Thread.Sleep(Properties.Settings.Default.IntervalForCheckingEngine);
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑澄清事:
我不拥有一个名为_engine的对象.我无法修改它,这就是为什么我不想在它们之间共享事件.我需要等到该类的方法返回true.
我有一个usercontrol(一个状态栏),它有一个隐含的最小大小(不通过属性设置,我的意思是,当它达到最小大小时,它不能被减少并且被裁剪).
有没有办法让主窗口知道UserControl将被裁剪并且不允许它减小它的大小?有了像WPF这样的智能布局系统,它必须是一种知道它正在裁剪的方式.看下一张图片:

我有几个定义DebuggerDisplay属性的类.我想知道是否有一种方法可以根据另一个定义一个DebuggerDisplay属性.如果我有以下课程:
[DebuggerDisplay ("Text = {Text}")]
class A
{
public string Text {get;set;}
}
[DebuggerDisplay ("Property = {Property}")]
class B
{
public A Property {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我希望看到A类的实例,因为它是在A类DebuggerDisplay属性上定义的.而不是我在查看B类对象时将A类ToString()方法放到调试器上.
我在C++中用VS2010完成了很多项目.现在我们已经切换到VS2012,但我们想继续使用VS2010运行时构建项目(我们需要支持Windows XP).
根据我们的理解,这可以使用Windows SDK 7.1,因为VC编译器就在那里,所以我们安装了它.VS2012认可了SDK,现在我们有了一个Platform Toolset名字Windows7.1SDK.
在构建项目时出现问题,因为一些项目正在返回:
错误MSB6006:"CL.exe"退出,代码为-1073741515.
此外,依赖于MFC的项目也失败了.Windows SDK不提供MFC?这是否意味着我们需要购买VS2010许可证才能在使用VS2010编译器构建VS2012的机器上安装它们?
提前致谢.
我已经完成了自定义图表控件,我想在光标后面绘制一个简单的交叉.该图表在Canvas上实现为PolyLine,我在Canvas的OnMouseMove事件中绘制两条线来改变它们的坐标.
The surprise was to found that the event get called only each 10 seconds or so event when the MainGUI thread is idle (the UI is completely responsive and if I pause the application the main thread is at the App mainForm.ShowDialog()).
Any idea on how to find why is this happening? I get the same performance using the OnMouseMove or the PreviewOnMouseMove.
EDIT: This is how I paint the cross (anyway if I put a breakpoint at …
使用下面的代码我期望以两个ListBox结束,它们具有相同的宽度,因为它们是两个columndefinition,带有With ="*"
而不是这看起来大小是由ListBox上的文本大小确定的,这是没有意义的,因为这个文本比ListBox小得多,因此TextBlock有足够的空间来容纳文本.
<Window x:Class="UnderstandSizing.Window5"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window5"
SizeToContent="WidthAndHeight"
ResizeMode="NoResize" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock Text="Text1longer" Grid.Row="0" Grid.Column="0" x:Name="Test1" />
<TextBlock Text="Text1" Grid.Row="0" Grid.Column="2" />
<ListBox Grid.Row="1" Grid.Column="0" Height="150" />
<ListBox Grid.Row="1" Grid.Column="2" Height="150" />
<TextBlock Grid.Row="2" Grid.ColumnSpan="3" Text="This textblock sets the max width" Width="300" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

WPF自动调整功能让我发疯...任何想法?谢谢.
编辑:在VS2008中完成的一切,以防万一.
我之前从未使用过WebClient,我不确定是否应该检查来自服务器的响应,以了解上传是否成功,或者如果没有异常我是否可以将文件设置为已上传.
如果我应该检查响应我该怎么做?解析resposeHeaders属性?
提前致谢.