您将如何在数学上模拟重复实际性能测量的分布 - "真实生活"意味着您不仅仅是循环使用相关代码,而且它只是在典型用户场景中运行的大型应用程序中的一小段内容?
我的经验表明,你通常在平均执行时间周围有一个峰值,可以用高斯分布充分建模.此外,还有一个包含异常值的"长尾" - 通常是平均时间的倍数.(考虑到导致首次执行惩罚的因素,这种行为是可以理解的).
我的目标是模拟合理地反映这一点的聚合值,并且可以从聚合值计算(例如高斯,从N计算mu和sigma,值的总和和平方和).换句话说,重复次数是无限的,但应尽量减少存储器和计算要求.
正态高斯分布不能适当地对长尾进行建模,并且即使非常小的异常值也会使平均偏差很大.
我正在寻找想法,特别是如果之前已经尝试/分析过.我已经检查了各种发行版模型,我想我可以解决一些问题,但我的统计数据是生锈的,我可能最终得到一个夸张的解决方案.哦,一个完整的收缩包装解决方案也可以;)
其他方面/想法:有时你得到"两个驼峰"的分布,这在我的场景中是可以接受的,其中一个mu/sigma覆盖两者,但理想情况下将单独识别.
推断这个,另一种方法是"浮动概率密度计算",它只使用一个有限的缓冲区并自动调整到范围(由于长尾,箱可能没有均匀间隔) - 没有找到任何东西,但有一些关于分配的假设原则上应该是可能的.
为什么(因为有人问) -
对于复杂的过程,我们需要做出保证,例如"只有0.1%的运行超过3秒的限制,平均处理时间为2.8秒".隔离代码片段的性能可能与正常运行时环境有很大不同,后者涉及不同级别的磁盘和网络访问,后台服务,一天内发生的预定事件等.
这可以通过累积所有数据来平凡地解决.但是,为了在生产中积累这些数据,需要限制所产生的数据.对于孤立的代码片段的分析,高斯偏差加上第一次运行罚分是可以的.对于上面找到的分布,这不再起作用了.
[编辑]我已经得到了很好的答案(最后 - 也许 - 一段时间来研究这个问题).我正在寻找更多的投入/想法.
假设我有一个匹配十六进制32位数的正则表达式:
([0-9a-fA-F]{1,8})
Run Code Online (Sandbox Code Playgroud)
当我构建一个正则表达式,我需要多次匹配,例如
(?<from>[0-9a-fA-F]{1,8})\s*:\s*(?<to>[0-9a-fA-F]{1,8})
Run Code Online (Sandbox Code Playgroud)
我是否每次都必须重复子表达式定义,或者有没有办法"命名和重用"它?
我会想象(警告,发明语法!)
(?<from>{hexnum=[0-9a-fA-F]{1,8}})\s*:\s*(?<to>{=hexnum})
Run Code Online (Sandbox Code Playgroud)
where hexnum=
将定义子表达式"hexnum",{= hexnum}将重用它.
因为我已经了解它很重要:我正在使用.NET System.Text.RegularExpressions.Regex
,但一般的答案也会很有趣.
在
template <typename T>
T const & foo(T const & dflt)
{ return /* ... */ ? /* ... */ : dflt; }
int x = foo(5);
Run Code Online (Sandbox Code Playgroud)
在分配给x之前,对临时的引用是否"存活"?
(我知道它在foo()调用的持续时间内存活,但是赋值让我犹豫)
有问题的代码在这里依赖于const引用有一些合法用途,即我需要两个独立的函数
T const & foo_cr(T const & dflt);
T const & foo_v(T dflt);
Run Code Online (Sandbox Code Playgroud)
我想避免(只是依赖于同名的不同签名对我来说似乎有点危险.)
当我使用wifstream将文本文件读取为宽字符串(std :: wstring)时,流实现是否支持不同的编码 - 即它是否可以用于读取例如ASCII,UTF-8和UTF-16文件?
如果没有,我该怎么办?
(我需要阅读整个文件,如果这有所不同)
COM对象通常具有确定性破坏:在释放最后一个引用时释放它们.
如何处理C# - COM Interop?这些类没有实现IDisposable
,所以我认为无法触发显式的IUnknown :: Release.
随意测试显示未引用的COM对象被懒惰地收集(即垃圾收集器触发释放).对于需要被激活释放的OCM对象,我该怎么办?(例如持有大型或共享的关键资源)?
原始问题:我们有一个C#应用程序大量使用COM库,它像疯了一样泄漏.似乎问题是"在C++和C#代码之间"(我们可以访问它们),但我们无法确定它.
我有两个结构:
// ----- non-const -----
struct arg_adapter
{
EArgType type; // fmtA, fmtB, ...
union
{
TypeA * valueA;
TypeB * valueB;
// ... more types
}
arg_adapter(TypeA & value) : type(fmtA), valueA(&value) {}
arg_adapter(TypeB & value) : type(fmtB), valueB(&value) {}
// ...
}
// ----- const version -----
struct const_arg_adapter
{
EArgType type; // fmtA, fmtB, ...
union
{
TypeA const * valueA;
TypeB const * valueB;
// ... more types
}
arg_adapter(TypeA const & value) : type(fmtA), valueA(&value) …
Run Code Online (Sandbox Code Playgroud) 我们的构建脚本使用一些嵌入式JavaScript创建HTML日志.当我在Internet Explorer中打开它时,我得到IE阻止运行"脚本或activex控件"的黄色警告栏.
由于它是本地文件,我无法将其添加到受信任的站点(IE在此处需要一个域).
我不想更改默认区域的安全设置.
知道如何永久解锁吗?
XP版本的IE版本为7.0.5730.13.
我正在尝试使用git和tortoise-git.
有没有办法隐藏永远不会被完全跟踪的文件?目前,当我提交更改时,所有临时构建文件与新文件位于相同的"未版本化"列表中.
我没有太多的COM接口,所以我有一个小问题,说我有这个代码:
[Guid("148BD528-A2AB-11CE-B11F-00AA00530503"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IEnumWorkItems {
[PreserveSig()]
int Next([In] uint RequestCount, [Out] out System.IntPtr Names,
[Out] out uint Fetched);
void Skip([In] uint Count);
void Reset();
void Clone([Out, MarshalAs(UnmanagedType.Interface)]
out IEnumWorkItems EnumWorkItems);
}
Run Code Online (Sandbox Code Playgroud)
我怎么知道"148BD528-A2AB-11CE-B11F-00AA00530503"对应于IEnumWorkItems:http://msdn.microsoft.com/en-us/library/aa380706( VS.85).aspx
就像我想知道这个界面的GUID:http://msdn.microsoft.com/en-us/library/aa381811(VS.85).aspx我在哪里可以找到它?
我正在寻找一种工具来简化分析大型C++项目(VC6)的链接器映射文件.
在维护期间,二进制文件稳步增长,我想知道它来自哪里.我怀疑在不同的DLL之间共享的库中有一些过于夸张的模板扩展,但是jsut browsign这个地图文件没有给出好的线索.
有什么建议?
c++ ×4
c# ×3
.net ×2
com ×2
algorithm ×1
code-size ×1
git ×1
interface ×1
interop ×1
javascript ×1
linker ×1
math ×1
performance ×1
qualifiers ×1
regex ×1
security ×1
statistics ×1
stl ×1
templates ×1
temporary ×1
tortoisegit ×1
unicode ×1
wifstream ×1