在过去,我使用了性能分析工具,如nprof,Equatec profiler和Yourkit分析器,以识别和消除/减少主要在一个线程中运行的代码中的性能瓶颈(序列化执行).现在我写了很多多线程代码,可以通过锁争用来减慢速度; 可以使用哪些工具和技巧来确定锁定争用发生的位置和数量?
.net parallel-processing performance multithreading profiling
Microsoft 实现了他们自己的紧凑二进制 XML 编码 (MC-NBFX),这是 WCF 中的一个选项,用于比标准 XML 文本编码更有效地传送 XML 信息集(例如 SOAP 请求和响应)。
我想使用相同的编码,例如以紧凑的二进制形式将大型 XML 文件保存到磁盘。
我开始于:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"<Foo><Bar>abc</Bar></Foo>");
using(FileStream fs = new FileStream("c:/tmp/foo.bin", FileMode.Create))
{
using(XmlDictionaryWriter xbw = XmlDictionaryWriter.CreateBinaryWriter(fs))
{
xmlDoc.WriteTo(xbw);
}
}
Run Code Online (Sandbox Code Playgroud)
这确实输出了一个 MC-NBFX 格式的文件,但是如果我用重复的字符串(例如元素名称)对 XML 文档进行编码,这些名称会在二进制文件中多次出现。
XmlDictionaryWriter 的要点在于它允许定义字符串字典并用字符串 ID 替换流中的字符串。实际上有两个字典,一个可以传递给 CreateBinaryWriter() 并且旨在成为预定/静态字典。我尝试插入这样一个静态字典,但编码器忽略了它:
XmlDictionary xmlDictionary = new XmlDictionary();
xmlDictionary.Add("Foo");
xmlDictionary.Add("Bar");
using(XmlDictionaryWriter xbw = XmlDictionaryWriter.CreateBinaryWriter(fs, xmlDictionary))
{
xmlDoc.WriteTo(xbw);
}
Run Code Online (Sandbox Code Playgroud)
第二种类型的字典是动态的,据说在编写过程中添加了字符串。要使用此机制,需要使用(并且可能覆盖)XmlBinaryWriterSession。例如:
XmlBinaryWriterSession writerSession = new XmlBinaryWriterSession();
using(XmlDictionaryWriter xbw = XmlDictionaryWriter.CreateBinaryWriter(fs, null, writerSession))
{
xmlDoc.WriteTo(xbw);
}
Run Code Online (Sandbox Code Playgroud)
同样,这对输出没有影响,仍然会出现重复的字符串,并且在写入完成后 …
如果C#编译器/抖动在所使用的硬件上可用,是否使用融合的乘法加法运算?如果可以,我是否需要设置任何特定的编译器设置才能利用它?
我的意图是将补偿算法用于扩展精度算术,并且其中一些可以编写为使用FMA。
IDistributedCache作为标准 API 提供,用于从 ASP.NET 应用程序内访问分布式缓存。提供的 API 非常简单,基本上将缓存呈现为键值对的容器,并使用DistributedCacheEntryOptions提供每个条目的到期选项。
现在,假设在一个应用程序中,有许多不同类型的数据需要缓存,我们可能希望对其中一些数据进行逻辑分组。也许我们希望对某些类型的数据进行分组,以便我们可以选择将其全部从缓存中刷新而不影响其他类型的数据,或者也许我们希望能够将某些类型的数据放入具有高可用性的不同缓存集群中,或更多资源以获得更好的性能等。
鉴于此,我倾向于拥有一个包含对象来保存 IDistributedCache 的多个实例,每个实例用于一个逻辑分组。鉴于这似乎是一个常见的要求,我想知道是否有某种标准方法可以实现这种模式。或者也许建议是将所有内容放入带有复合键(例如 groupName-key)的单个缓存中,尽管我不想这样做,因为我认为这限制了缓存层的灵活性。
顺便说一句,我注意到 NCache API 提供了有选择地为每个缓存条目分配 groupName 和 subGroupName 的能力,我认为这正是我想要的。不过,我更喜欢针对 IDistributedCache(或类似的)进行编码,以便允许插入式替代缓存实现。
也许另一个选择是创建我自己的接口来提供抽象,但是我无法选择使用预构建的现成 IDistributedCache 实现(例如来自 NCache 和 Redis)。
另请参阅: https: //github.com/aspnet/Extensions/issues/2802
偶尔我需要在一组值中检查重复的ID,通常我会使用一个字典 - 只使用键并将值留空.
请注意,这是严格且高度优化的代码,因此请不要"过早优化"!假设CPU和RAM被挤压到极限的情况,我想收集关于更优化解决方案的意见; 大概类似于Lookup类会避免不必要的RAM分配,因此会稍快一些.是否有这样的课程要么是第三方,要么是我在BCL中忽略的一些课程?
我知道google已经发布了快速和紧凑字典类的代码 - 也许那里有东西可以移植到C#/ .Net?
谢谢.
所述盒-缪勒变换,是从高斯分布随机采样值的优雅和合理高性能方法.
我正在寻找一种更清晰的C#编写方法.
作为参考,这里是Box-Muller实现的一个实现,作为性能比较的基准......
public class GaussianGenerator
{
FastRandom _rng = new FastRandom();
double? _spareValue = null;
/// <summary>
/// Get the next sample point from the gaussian distribution.
/// </summary>
public double NextDouble()
{
if(null != _spareValue)
{
double tmp = _spareValue.Value;
_spareValue = null;
return tmp;
}
// Generate two new gaussian values.
double x, y, sqr;
// We need a non-zero random point inside the unit circle.
do
{
x = 2.0 * _rng.NextDouble() - 1.0; …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的自定义 UserControl,名为 MyControl
在我的表单中,我有以下代码(我尝试将其放入 LoadEvent 和构造函数中,在 InitalizeCompoment 之后):
var crl = new MyControl();
Controls.Add(ctrl);
ctrl.HandleDestroyed+=(sender,evt) => { MessageBox.Show("Destroyed") };
Run Code Online (Sandbox Code Playgroud)
但是当我关闭时,表单处理程序永远不会被调用。
具体来说,我们有一个SQL Server存储过程接受hierarchyId作为参数,通常我们在存储过程中有一个SOAP层,允许通过SOAP调用它们.
SOAP服务是使用C#方法的[WebMethod]属性实现的,这些方法是使用本机dotNet类型定义的,这些类型通常很好地映射到SQL服务器类型.
目前我不确定在C#WebMethod中使用哪种数据类型来接受hierarchyId.也许我应该使用形式为'/ 1/2/3 '的层次结构路径字符串和一个函数来将其解析为可以传递给存储过程的SqlHierarchyId.
我们有一个将XML写入XmlWriter的方法,我们使用它直接生成XML流,而不必通过某种形式的DOM.但是在某些情况下我们确实想要创建DOM.一种方法是始终构建一个DOM并从中流式传输(以满足这两个要求),但我们喜欢直接编写XML的性能.因此,我们希望从XmlWriter构建DOM.
请参见如何在.NET中使用XmlWriter创建XmlDocument?有关如何从XmlWriter创建XmlDocument的示例,尽管使用略微偏离滑雪的代码模式.如果我想要一个XDocument(或XElement子树),是否有类似的选项?
我正在寻找这种新的二进制数据表示的任何实现。
.net ×5
c# ×5
performance ×3
xml ×2
asp.net-core ×1
binary-data ×1
binary-xml ×1
caching ×1
cbor ×1
dictionary ×1
fma ×1
gaussian ×1
hierarchyid ×1
linq-to-xml ×1
math ×1
optimization ×1
profiling ×1
sampling ×1
sql-server ×1
wcf ×1
winforms ×1
xelement ×1
xmlwriter ×1