通过将我的本机C++客户端和服务器构建为64位代码,我是否期望获得任何性能提升?
具有64位特定构建会使哪些应用程序受益?
我想象任何可以大量使用long的东西都会受益,或者任何需要大量内存(即超过2Gb)的应用程序,但我不确定还有什么.
我们一直在尝试使用C#编写的worker类的单元测试,它使用moq模拟第三方API(基于COM)来动态创建模拟对象.NUnit是我们的单元测试框架.
这个第三方组件实现了几个接口,但还需要使用事件回调到我们的工作类.我们的计划是模拟第三方组件可以引发的事件,并测试我们的工人类是否按预期运行.
不幸的是,我们遇到了一个问题,因为moq似乎无法模拟并引发外部定义的事件.遗憾的是,我无法提供我们正在使用的确切第三方API的代码,但我们使用MS Word API重新创建了该问题,并且还显示了在使用本地定义的界面时测试如何工作:
using Microsoft.Office.Interop.Word;
using Moq;
using NUnit.Framework;
using SeparateNamespace;
namespace SeparateNamespace
{
public interface LocalInterface_Event
{
event ApplicationEvents4_WindowActivateEventHandler WindowActivate;
}
}
namespace TestInteropInterfaces
{
[TestFixture]
public class Test
{
[Test]
public void InteropExample()
{
// from interop
Mock<ApplicationEvents4_Event> mockApp = new Mock<ApplicationEvents4_Event>();
// identical code from here on...
bool isDelegateCalled = false;
mockApp.Object.WindowActivate += delegate { isDelegateCalled = true; };
mockApp.Raise(x => x.WindowActivate += null, null, null);
Assert.True(isDelegateCalled);
}
[Test]
public void LocalExample()
{
// from …Run Code Online (Sandbox Code Playgroud) 我们正在开发一个包含.NET组件和传统C++ COM组件的ClickOnce应用程序.
目前我们正在使用MSI将C++ COM组件添加到用户的计算机上(这是安装ClickOnce应用程序的先决条件),这意味着我们可以事先在用户的计算机上注册COM对象.
我们仍然可以通过ClickOnce推送用C#编写的其余应用程序的更新,但更新MSI安装的组件需要手动干预.
但是,我们试图弄清楚是否可以通过免注册COM安装C++ COM组件,即它们都在同一目录中,并且每个组件都有一个清单文件,指定每个COM对象和接口的clsid.这意味着我们可以完全摆脱MSI.
这个链接是对该主题的一个很好的介绍.
我已经能够获得一个.NET组件来加载C++ COM对象,但不是相反.
有谁知道这是否可能?
在调试模式下运行测试用例时出现问题:我收到一个弹出框,其中显示消息"Test.exe中0x7c812fd3处的未处理异常:0xE0000003:0xe0000003.".代码在free.c中断:
void __cdecl _free_base (void * pBlock)
{
int retval = 0;
if (pBlock == NULL)
return;
RTCCALLBACK(_RTC_Free_hook, (pBlock, 0));
retval = HeapFree(_crtheap, 0, pBlock);
if (retval == 0)
{
errno = _get_errno_from_oserr(GetLastError());
}
}
Run Code Online (Sandbox Code Playgroud)
在"retval = ..."行,_crtheap = 0x00df0000和pBlock = 0x967c93d3.调用堆栈在"kernel32.dll!7c812fd3()"和调用堆栈中的另一个条目中断:"> msvcr100d.dll!_free_base(void*pBlock = 0x967c93d3)50行+ 0x13字节".
我已经搜索了相当多的问题,问题可能来自释放内存的时间.尽管这种模糊和凌乱的描述可以任何人提示如何找到问题?也许如何解决它?
令我感到有点奇怪的是,我在发布模式下运行测试时没有遇到这种情况......
亲切的问候,Svend
我在Windows上使用CVS(使用WinCVS前端),并希望在构建失败时将自动构建过程中最后一次检入的详细信息添加到电子邮件中,以便更容易修复.
我需要知道已更改的文件,更改它们的用户以及注释.
我一直试图找出命令行选项,但似乎从来没有得到准确的结果(要么得到太多的结果,而不是只从一个签到,或两周前的一些随机签入的详细信息)
我们需要在64位Vista上运行32位版本的远程桌面客户端,因为我们的部分产品与其集成,并通过虚拟通道与终端服务器端应用程序进行通信。该集成加载一些第三方32位驱动程序,并且无法在64位进程中加载32位dll。
通常,从命令行运行 32 位版本的 Windows 应用程序非常容易,例如运行 window:
C:\Windows\SysWOW64\Notepad.exe
Run Code Online (Sandbox Code Playgroud)
您可以通过检查任务监视器\进程来判断该进程是 32 位的,因为文件名旁边会有一个 *32。
然而,远程桌面客户端(mstsc.exe)不想玩球。无论我如何启动它(运行窗口、32 位 cmd 窗口等),它始终从 C:\Windows\System32\mstsc.exe 运行 64 位版本。我尝试编写一个 32 位 C++ 程序来创建它(通常子进程也是 32 位),但这不起作用。
我也尝试打电话:
Wow64DisableWow64FsRedirection
Wow64RevertWow64FsRedirection
Run Code Online (Sandbox Code Playgroud)
启动 mstsc.exe 之前和之后,但这也没有帮助。
有人知道解决这个问题的方法吗?
[编辑] 我用进程监视器做了一些进一步的调查,似乎 32 位版本的 mstsc 确实首先启动,但随后这会创建第二个 64 位进程,并且 32 位版本关闭。
我们在我们的开发部门运行一台构建机器,我们已经建立了整个工作日不断构建的机器.这样做是:
鉴于上述情况,添加不同硬件会对提高上述时间所需的时间产生何种影响?
例如 - 我正在考虑将SSD用于硬盘,因为编译涉及大量随机磁盘访问.
subversion服务器当前是一个虚拟机 - 将它切换为物理机器有助于缓慢结账?
从Core 2 Duo处理器升级到i7的影响是什么?
有关加快上述速度的其他建议吗?
hardware msbuild performance continuous-integration build-process
我解决了大部分问题.我可以遍历工作表,我可以创建文本文件并写入它.我遇到的唯一问题实际上是从每张表中提取文本或值.下面是我的代码,但它只会为每个工作表抛出一个对象,并将这些单词写入我的文本文件而不是实际值.
System.Object[,]
System.Object[,]
Run Code Online (Sandbox Code Playgroud)
我还缺少什么?我应该指出我是一名初学程序员.
这是我到目前为止的代码:
using (StreamWriter sw = File.CreateText("ExtractedText.txt"))
{
Excel.Application xlApp = new Excel.Application();
Excel.Workbook thisWkBook = xlApp.Workbooks.Open(thisFile);
foreach (Excel.Worksheet sheet in thisWkBook.Worksheets)
{
sw.WriteLine(sheet.UsedRange.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢!
有什么区别
class abc : qwe
{
}
Run Code Online (Sandbox Code Playgroud)
和
class zxc : qwe
{
zxc() : base(new someAnotherclass()).
{
}
}
Run Code Online (Sandbox Code Playgroud) 我在gatsby .env文件中有一个多行私钥:
GATSBY_GOOGLE_CLIENT_ID="12345"
GATSBY_GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nflkdflkdf...\n-----END PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)
在我的gatsby-config文件中,我有:
module.exports = {
resolve: 'gatsby-source-google-sheets',
options: {
credentials: {
"type": "service_account",
"private_key": process.env.GATSBY_GOOGLE_PRIVATE_KEY,
"client_id": process.env.GATSBY_GOOGLE_CLIENT_ID
}
}
}
Run Code Online (Sandbox Code Playgroud)
的client_id,因为它只是一个线串,但能正常工作private_key没有做的工作,大概是因为它是多线。
有办法解决这个问题吗?
谢谢