我正在寻找一个用于对单元测试进行微基准测试的库,以监控代码更改如何影响性能.也就是说,我希望库将结果输出到例如XML以保存历史记录.它必须能够在没有任何人工助手的情况下完成此任务(即在我们的构建服务器上连续运行而不会有太多麻烦).
该库应该非常简单,并且可以处理现有的单元测试.我希望[Benchmark]在我想要测试或使用using-block 的测试中标记具有属性的测试,例如
using (var benchmarker = new Benchmarker())
{
// Code to profile
} // Dispose() stores measurements.
Run Code Online (Sandbox Code Playgroud)
请注意,我没有对分析工具感兴趣,因为我以编程方式不想指定我想要分析的代码的哪些部分.应积极维护图书馆.
我已经看过Jon Skeet的解决方案,但发现它有点过于干扰,并且NTime已经死了几年.
可能重复:
Nullable类型不是可空类型?
为什么GetType返回System.Int32而不是Nullable <Int32>?
我期望((int?) 1).GetType()回来typeof(int?),但事实证明它返回typeof(int):
bool a = ((int?)1).GetType() == typeof(int?); // a is false
bool b = ((int?)1).GetType() == typeof(int); // b is true
Run Code Online (Sandbox Code Playgroud)
仍然,((int?) 1).HasValue编译和运行等代码就好了.
为什么铸造int到int?返回int?
请注意,如果我1用一些int-variable 替换constant(),这也适用.
我正在尝试使用XSLT将简单的XML模式转换为HTML并计划fn:replace用于替换returns(\n)<p>;.但是,我无法弄清楚如何正确使用此功能.
我正在使用的XSLT简化版读取:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:template match="/root">
<html>
<body>
<!-- Replace \n with <p> -->
<xsl:value-of select="fn:replace(value, '\n', '<p>')" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
此XLST的输入是例如:
<?xml version="1.0"?>
<root>
<value><![CDATA[
Hello
world!
]]></value>
</root>
Run Code Online (Sandbox Code Playgroud)
fn:replace使用NoSuchMethodException 转换失败.如果我将replace语句更改为
<xsl:value-of select="fn:replace('somestring', '\n', '<p>')" />
Run Code Online (Sandbox Code Playgroud)
我收到了IllegalArgumentException.我如何使用fn:replace来实现我想要的?
我正在使用Butterfly XML Editor来测试XSLT.
我试图使用XSLT和XPath函数fn:sum在XML中总结一组值.只要值为非null,这样就可以正常工作,但事实并非如此.为了说明我的问题,我做了一个例子:
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:template match="/root">
<root>
<!-- Works fine for non-null values -->
<sum><xsl:value-of select="fn:sum(values/value)" /></sum>
</root>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
和XML:
<?xml version="1.0"?>
<root>
<values>
<value>1</value>
<value>2</value>
<value>3</value>
<value>4</value>
<!-- Nullvalue -->
<value />
</values>
</root>
Run Code Online (Sandbox Code Playgroud)
只要没有空值,该示例就可以正常工作.我已经尝试了各种变量的选择,例如<xsl:value-of select="fn:sum(values[value != '']/value)" />(你可能会注意到,XSLT导出不多;))如何过滤掉空值?
我想知道为什么EventArgs构造函数没有受到保护,因为为每个事件分配一个空对象的资源似乎浪费(尽管很小),特别是当有一个EventArgs.Empty明显更高效的单例时.这让我感到惊讶,特别是当.NET的其他部分确实有一个受保护/私有构造函数以避免多个不必要的分配时,例如Comparer<T>.
是否存在创建new EventArgs()(非子类)实际上有意义的情况,或者构造函数是否仅用于简化非经验开发人员的使用?
我试图使用Task.ContinueWith与TaskContinuationOptions.AttachedToParent执行后续任务,如
Task outerTask = new Task(() => Console.WriteLine("Outer"));
Task innerTask = outerTask.ContinueWith(t =>
{
Thread.Sleep(500);
Console.WriteLine("Inner");
},
TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnRanToCompletion);
outerTask.Start();
outerTask.Wait();
Console.WriteLine("Outer done");
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是
Outer
Outer done
Inner
Run Code Online (Sandbox Code Playgroud)
但我期望/试图实现的是
Outer
Inner
Outer done
Run Code Online (Sandbox Code Playgroud)
是否可以用来AttachedToParent阻止外部任务完成,或者AttachedToParent只对嵌套任务有效?
编辑:
我想要实现的是我希望在outerTask成功完成后运行延续任务.我想outerTask将异常传播innerTask给调用者,而不必处理innerTask.如果outerTask失败,它应该立即抛出异常(在outerTask.Wait()没有调用的情况下innerTask).
我正在处理一个实现使用AFNetworking 2.0创建的下载队列的应用程序,我想知道是否有办法限制同时运行的最大下载任务数(NSURLSessionDownloadTask).
我的最终目标是我的下载队列管理所有任务,一个完成,然后下一个将开始.
我知道,例如,NSOperationQueue有maxConcurrentOperationCount属性,但我不知道AFNetworking 2.0是否在较低级别使用NSOperationQueue进行下载任务.另外,我知道AFURLSessionManager有一个NSArray包含所有正在运行的下载任务,但就是这个,一个数组.
谢谢
我有一个非常大的XML文档(大约120M),我不想立刻将它加载到内存中.我的目的是检查此文件是否使用有效的UTF-8编码.
有什么想法可以快速检查,而不是以整个文件的形式读入整个文件byte[]?
我正在使用VSTS 2008和C#.
当XMLDocument用于加载包含无效字节序列的XML文档时,有一个例外,但是当将所有内容读入字节数组然后检查UTF-8时,没有任何异常,任何想法?
这是显示我的XML文件内容的屏幕截图,或者您可以从此处下载该文件的副本
编辑1:
class Program
{
public static byte[] RawReadingTest(string fileName)
{
byte[] buff = null;
try
{
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(fileName).Length;
buff = br.ReadBytes((int)numBytes);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return buff;
}
static void XMLTest()
{
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load("c:\\abc.xml");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void …Run Code Online (Sandbox Code Playgroud) 我有一个依赖于MSVCR80的第三方DLL,并分配我需要清理的资源.该库未暴露free-函数这样做.相反,我需要加载相同的运行时库并手动调用该free函数.
作为一种解决方法,我正在尝试编写一个"包装器"DLL,它可以加载正确的运行时并公开该free函数.此DLL是使用Visual Studio 2010创建的,并且依赖于单独的运行时库.做LoadLibrary("msvcr80.dll")错失了错误R6034我猜是因为明显的问题.
甚至可以使用LoadLibrary?加载msvcr80.dll ?我是否需要创建清单,将其嵌入到DLL中并将msvcr80.dll存储在与我的包装DLL相同的目录中?
我意识到这是第三方库中的一个缺陷,但我几乎坚持使用这个版本.让供应商解决这个问题很可能不是一种选择.
这是相当牵强的,但以下代码是"安全的"(即保证不会导致分段错误):
std::vector<int> vec(1); // Ensures that &vec[0] is valid
vec.reserve(100);
memset(&vec[0], 0x123, sizeof(int)*100); // Safe?
Run Code Online (Sandbox Code Playgroud)
我意识到这很难看 - 我只想知道它是否技术上安全,而不是"漂亮".我猜它唯一的用法可能是忽略存储在给定索引之外的值.
注意!如何获取vector :: reserve()分配的缓冲区地址?涵盖相同的主题,但我更感兴趣的是,如果这是安全的,如果有这样的陷阱.
编辑:原代码是错误的,取代原来memcpy用memset.