小编Opm*_*met的帖子

单元测试x86 LargeAddressAware兼容性

对于win32可执行文件(x86),我们可以设置LargeAddressAware标志,以便在x64 Windows上运行时可以访问4 GB(而不是2 GB)的虚拟地址空间.
这看起来非常吸引人.但是,存在风险.
例如,请参阅:对于32位Windows可执行文件使用/ LARGEADDRESSAWARE的缺点?

因此,让我们继续配置正在执行某些单元测试的系统,并将系统范围的注册表开关AllocationPreference设置为MEM_TOP_DOWN.
应该这样做,不应该吗?

它没有!
问题是Visual Studio的x86"测试运行器"(执行引擎)本身没有启用LAA.
这个父进程只能看到"较低"的2 GB VAS,我们的模块也将被测试.

VS2013.1中的示例

  • mstest.exe 产卵 QTAgent32.exe
  • vstest.console.exe 产卵 vstest.executionengine.x86.exe

所有这些都没有启用LAA!

那么使用支持LAA的x86测试运行器的推荐方法是什么?


这是一个用于检查LAA执行环境的小代码片段(VS单元测试,csharp).
除非它成功,否则你的测试环境适合让你的单元测试(也)覆盖与LAA的兼容性:

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestCheckEnv32LAA
{
    [TestClass]
    public class CheckEnv32LAA
    {
        #region [Native DLL import]

        [Flags()]
        public enum AllocationType : uint
        {
            COMMIT = 0x1000,
            RESERVE = 0x2000,
            RESET = 0x80000,
            LARGE_PAGES = 0x20000000,
            PHYSICAL = 0x400000,
            TOP_DOWN …
Run Code Online (Sandbox Code Playgroud)

windows unit-testing mstest virtual-address-space visual-studio-2013

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

vmware - 从GUEST恢复到快照?

我有运行的虚拟机vmware ESXivmware workstation.
我需要执行"还原到快照",从里面客人.

我已经做了很多搜索,但到目前为止提出的所有解决方案都建议从"外部" - 外部机器或主机本身.
其他解决方法建议启用自动恢复power off事件快照.

请不要建议在那个方向什么.我真的需要访客中执行它.例如:

  • 按计划任务
  • 作为批处理脚本(在完成其他一些任务结束时)

编辑:
这就是为什么我认为必须有一些方法来实现这一点:在访客内部有"vmare工具"作为系统服务运行.所以我希望这个组件还公开一个功能来触发主机/虚拟机管理程序将当前虚拟机恢复为快照.
如果目前不可能,那么它应该被实现为新功能:)

万一目前无法"从内部"执行它:这也是一个"答案"......

vmware esxi vmware-workstation

4
推荐指数
1
解决办法
6048
查看次数

PDF文档中是否允许字节顺序标记?

我在编写过滤程序时遇到问题.它通过读取文件的前5个字节并将其与固定缓冲区进行比较来检测文件是否为PDF文档:

25 50 44 46 2D

这工作正常,除了我看到一些以字节顺序标记开头的文件:

EF BB BF 25 50 44 46 2D ^-------^

我想知道PDF规范是否真的允许这样做.如果我查看该文档的第7.5节,我将其读作"否":

PDF文件的第一行应为包含5个字符%PDF的标题,后跟1.N形式的版本号,其中N是0到7之间的数字

然而,我在野外看到这些文档,用户感到困惑,因为PDF阅读器程序可以通过我的过滤器拒绝它们来打开这些文档.

那么:PDF文档开头是否允许BOM标记?(我不是在谈论字符串对象,而是PDF文件本身)

pdf byte-order-mark

4
推荐指数
1
解决办法
616
查看次数

jpeg无损转换 - 内存消耗?

我刚刚从http://jpegclub.org/jpegtran/下载了最新的win32 jpegtran.exe并观察了以下内容:

我准备了一个24 BPP jpeg测试图像,14500 x 10000像素.

  • 文件系统中的压缩大小约为7.5 MB.
  • 解压缩到内存(使用某些图像查看器)膨胀到大约450 MB.

在无损旋转期间监视jpegtran.exe命令行工具的内存消耗(180)我可以看到消耗高达900 MB内存的进程!

我会假设这样的jpeg无损转换不需要将图像文件解码到内存中,而只是对编码文件本身执行一些数学转换 - 保持内存占用非常低.

那以下哪项是真的?

  • 这个特定工具实现中的一些错误
  • 我错过了一些配置开关
  • 我的一些误解(即jpeg无损转换还需要将图像解码到内存中?)
  • "数学运算"比"将图像解码为内存"消耗的内存更多

编辑:

根据JasonD的回答,原因似乎是后者.所以我会延伸我的问题:

是否有任何实现可以在小块中执行这些操作(以避免高内存使用)?还是总是需要在整体上完成而且没有办法绕过它?

PS:
我不打算实现自己的编解码器/算法.相反,我问是否有任何实现符合我的要求.或者至少在理论上是否存在.

memory jpeg imaging codec libjpeg-turbo

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

检测vcredist的存在 - 使用UpgradeCode

wix burn bootstrapper bundle中:如何检测ms vcredist 2013 x86是否存在?
我正在检查特定包的Upgrade Id/ UpgradeCode,但是包总是重新安装它,即使它已经安装了.

...
<Bundle>
    ...
    <Chain>
        <!-- redist packages -->
        <PackageGroupRef Id="redist"/>
        ...
    </Chain>
</Bundle>

<Fragment>
    <PackageGroup Id="redist">
        <PackageGroupRef Id="redist_vc120" />
        ...
    </PackageGroup>
</Fragment>

<Fragment>
    <!-- vcredist 2013 x86 -->
    <?define vcredist2013minversion="12.0.21005"?>
    <Upgrade Id="B59F5BF1-67C8-3802-8E59-2CE551A39FC5">
        <UpgradeVersion Minimum="$(var.vcredist2013minversion)" Property="VCREDIST2013INSTALLED" OnlyDetect="yes" IncludeMinimum="yes" />
    </Upgrade>

    <PackageGroup Id="redist_vc120">
        <ExePackage Id="vc120" Cache="yes" PerMachine="yes" Permanent="yes" Vital="yes" Compressed="yes"
            Name="redist\VC120_Runtime\vcredist_x86.exe"
            InstallCommand="/quiet /norestart"
            InstallCondition="Not VCREDIST2013INSTALLED"
        />
    </PackageGroup>
</Fragment>
...
Run Code Online (Sandbox Code Playgroud)

这有什么不对InstallCondition吗?
还是我需要添加一个DetectCondition? …

windows-installer wix burn vcredist

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