对于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.exevstest.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
我有运行的虚拟机vmware ESXi和vmware workstation.
我需要执行"还原到快照",从里面的客人.
我已经做了很多搜索,但到目前为止提出的所有解决方案都建议从"外部" - 外部机器或主机本身.
其他解决方法建议启用自动恢复power off事件快照.
请不要不建议在那个方向什么.我真的需要在访客中执行它.例如:
编辑:
这就是为什么我认为必须有一些方法来实现这一点:在访客内部有"vmare工具"作为系统服务运行.所以我希望这个组件还公开一个功能来触发主机/虚拟机管理程序将当前虚拟机恢复为快照.
如果目前不可能,那么它应该被实现为新功能:)
万一目前无法"从内部"执行它:这也是一个"答案"......
我在编写过滤程序时遇到问题.它通过读取文件的前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文件本身)
我刚刚从http://jpegclub.org/jpegtran/下载了最新的win32 jpegtran.exe并观察了以下内容:
我准备了一个24 BPP jpeg测试图像,14500 x 10000像素.
在无损旋转期间监视jpegtran.exe命令行工具的内存消耗(180)我可以看到消耗高达900 MB内存的进程!
我会假设这样的jpeg无损转换不需要将图像文件解码到内存中,而只是对编码文件本身执行一些数学转换 - 保持内存占用非常低.
那以下哪项是真的?
编辑:
根据JasonD的回答,原因似乎是后者.所以我会延伸我的问题:
是否有任何实现可以在小块中执行这些操作(以避免高内存使用)?还是总是需要在整体上完成而且没有办法绕过它?
PS:
我不打算实现自己的编解码器/算法.相反,我问是否有任何实现符合我的要求.或者至少在理论上是否存在.
在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? …