小编lar*_*moa的帖子

.NET微基准测试API

我正在寻找一个用于对单元测试进行微基准测试的库,以监控代码更改如何影响性能.也就是说,我希望库将结果输出到例如XML以保存历史记录.它必须能够在没有任何人工助手的情况下完成此任务(即在我们的构建服务器上连续运行而不会有太多麻烦).

该库应该非常简单,并且可以处理现有的单元测试.我希望[Benchmark]在我想要测试或使用using-block 的测试中标记具有属性的测试,例如

using (var benchmarker = new Benchmarker())
{
  // Code to profile
} // Dispose() stores measurements.
Run Code Online (Sandbox Code Playgroud)

请注意,我没有对分析工具感兴趣,因为我以编程方式不想指定我想要分析的代码的哪些部分.应积极维护图书馆.

我已经看过Jon Skeet的解决方案,但发现它有点过于干扰,并且NTime已经死了几年.

.net c# benchmarking profiling unit-testing

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

为什么((int?)1).GetType()返回typeof(int)?

可能重复:
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编译和运行等代码就好了.

为什么铸造intint?返回int

请注意,如果我1用一些int-variable 替换constant(),这也适用.

.net c# nullable .net-4.0

8
推荐指数
0
解决办法
347
查看次数

使用XPath函数fn:从XSLT替换

我正在尝试使用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.

xml xslt xpath

7
推荐指数
1
解决办法
3万
查看次数

在XSLT中使用fn:sum,其中包含包含空值的节点集

我试图使用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导出不多;))如何过滤掉空值?

xml xslt xpath

7
推荐指数
2
解决办法
1万
查看次数

为什么EventArgs构造函数不受保护?

我想知道为什么EventArgs构造函数没有受到保护,因为为每个事件分配一个空对象的资源似乎浪费(尽管很小),特别是当有一个EventArgs.Empty明显更高效的单例时.这让我感到惊讶,特别是当.NET的其他部分确实有一个受保护/私有构造函数以避免多个不必要的分配时,例如Comparer<T>.

是否存在创建new EventArgs()(非子类)实际上有意义的情况,或者构造函数是否仅用于简化非经验开发人员的使用?

c# events singleton

7
推荐指数
1
解决办法
419
查看次数

Task.ContinueWith和TaskContinuationOptions.AttachedToParent

我试图使用Task.ContinueWithTaskContinuationOptions.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).

.net c# task-parallel-library

7
推荐指数
1
解决办法
6349
查看次数

AFNetworking 2:限制最大并发下载任务数

我正在处理一个实现使用AFNetworking 2.0创建的下载队列的应用程序,我想知道是否有办法限制同时运行的最大下载任务数(NSURLSessionDownloadTask).

我的最终目标是我的下载队列管理所有任务,一个完成,然后下一个将开始.

我知道,例如,NSOperationQueuemaxConcurrentOperationCount属性,但我不知道AFNetworking 2.0是否在较低级别使用NSOperationQueue进行下载任务.另外,我知道AFURLSessionManager有一个NSArray包含所有正在运行的下载任务,但就是这个,一个数组.

谢谢

iphone ios ios7 afnetworking-2

7
推荐指数
1
解决办法
6366
查看次数

使用UTF-8解码文件流

我有一个非常大的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)

c# validation encoding utf-8

6
推荐指数
1
解决办法
2万
查看次数

编写一个加载msvcr80.dll并暴露free()函数的DLL

我有一个依赖于MSVCR80的第三方DLL,并分配我需要清理的资源.该库暴露free-函数这样做.相反,我需要加载相同的运行时库并手动调用该free函数.

作为一种解决方法,我正在尝试编写一个"包装器"DLL,它可以加载正确的运行时并公开该free函数.此DLL是使用Visual Studio 2010创建的,并且依赖于单独的运行时库.做LoadLibrary("msvcr80.dll")错失了错误R6034我猜是因为明显的问题.

甚至可以使用LoadLibrary?加载msvcr80.dll ?我是否需要创建清单,将其嵌入到DLL中并将msvcr80.dll存储在与我的包装DLL相同的目录中?

我意识到这是第三方库中的一个缺陷,但我几乎坚持使用这个版本.让供应商解决这个问题很可能不是一种选择.

c++ dll winapi manifest msvcrt

6
推荐指数
1
解决办法
793
查看次数

在std :: vector :: reserve safe之后访问原始指针?

这是相当牵强的,但以下代码是"安全的"(即保证不会导致分段错误):

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()分配的缓冲区地址?涵盖相同的主题,但我更感兴趣的是,如果这是安全的,如果有这样的陷阱.

编辑:原代码是错误的,取代原来memcpymemset.

c++ stl vector

6
推荐指数
1
解决办法
1645
查看次数