是否有任何库或软件或任何方法将Windows中单个进程的状态保存到文件中,然后将运行进程恢复到运行状态,以后所有内存都已加载?
我知道打开的句柄必须重新打开,线程可能必须启动等,但是堆和单个线程堆栈至少可以恢复吗?
我看到了这个问题,但答案都是针对linux的,大多数人都认为无法完成.
我知道我可以将所有数据结构序列化并自己完成,但我想知道如果没有它可行.
我想在我的C#应用程序中添加日志记录或跟踪,但是如果将日志详细级别设置得太低以至于不记录消息,我不希望记录格式化字符串或计算值的开销.
在C++中,您可以使用预处理器来定义将阻止代码执行的宏,如下所示:
#define VLOG(level,expr) if (level >= g_log.verbosity) { g_log.output << expr; }
Run Code Online (Sandbox Code Playgroud)
像这样使用:
VLOG(5,"Expensive function call returns " << ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)
你是怎么用C#做的?
我读过的微软文档解释了跟踪和调试设施在这里,他们声称,使用和#undef DEBUG和#undef TRACE删除所有从生产的可执行文件跟踪和调试代码,但它真的删除整个通话?意思是,如果我写的话
System.Diagnostics.Trace.WriteLineIf(g_log.verbosity>=5,ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)
如果我取消定义TRACE,它不会调用我昂贵的功能吗?或者是打电话,然后决定它不会追踪任何东西?
无论如何,即使它确实删除它,这也不如C++宏,因为我无法使那个大丑陋的调用看起来像我在C++中的简单VLOG()调用,仍然可以避免评估参数,是吗?我也不能像在C++中那样在运行时定义详细程度来避免开销,对吧?
我有一个服务组件安装在COM +服务器应用程序中.我想从远程客户端创建一个实例.客户端需要能够动态指定服务器计算机的名称.我该怎么做呢?
我尝试过使用Activator:
(XSLTransComponent.XSLTransformer)Activator.GetObject(
typeof(XSLTransComponent.XSLTransformer),
serverName
);
Run Code Online (Sandbox Code Playgroud)
但我明白了:
System.Runtime.Remoting.RemotingException:无法创建通道接收器以连接到URL"服务器".可能尚未注册适当的频道.在System.Runtime.Remoting.RemotingServices.Unmarshal(类型classToProxy,String url,Object data)
我需要注册一个频道吗?如果是这样,怎么样?
另一个想法是使用Marshall.BindToMoniker,但是如何为服务器x上的COM +上托管的远程对象指定名字对象?
我正在设计一个将时间序列数据写入文件的系统.数据是8个字节的块,分为两个4字节部分,时间和有效负载.
根据MSDN,WriteFile函数是原子的(http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx),如果写入的数据小于扇区的大小.
由于文件只包含这些块(文件没有"结构",因此无法重建损坏的文件),一个接一个地添加,因此整个块或者没有任何内容写入文件是至关重要的.一直.
所以问题是,我是否正确地理解了,无论在实际调用writefile期间发生了什么,一个小于扇区的写文件总是完全写入磁盘或根本不写入?
为什么Visual C++编译器在这里调用错误的重载?
我有一个ostream的子类,我用它来定义格式化的缓冲区.有时我想创建一个临时的,并立即插入一个字符串,使用通常的<<运算符,如下所示:
M2Stream() << "the string";
Run Code Online (Sandbox Code Playgroud)
不幸的是,程序调用运算符<<(ostream,void*)成员重载,而不是运算符<<(ostream,const char*)非成员.
我将下面的示例编写为测试,我在其中定义了自己的M2Stream类来重现问题.
我认为问题是M2Stream()表达式产生一个临时的,这在某种程度上导致编译器更喜欢void*overload.但为什么?事实证明,如果我为非成员重载const M2Stream&做第一个参数,我就会产生歧义.
另一个奇怪的事情是,如果我首先定义一个const char*类型的变量然后调用它而不是文字字符串字符串,它会调用所需的const char*重载,如下所示:
const char *s = "char string variable";
M2Stream() << s;
Run Code Online (Sandbox Code Playgroud)
就好像文字字符串的类型不同于const char*变量!它们不应该是一样的吗?当我使用临时字符串和字符串字符串时,为什么编译器会调用void*重载?
#include "stdafx.h"
#include <iostream>
using namespace std;
class M2Stream
{
public:
M2Stream &operator<<(void *vp)
{
cout << "M2Stream bad operator<<(void *) called with " << (const char *) vp << endl;
return *this;
}
};
/* If I make first arg const M2Stream &os, I get
\tests\t_stream_insertion_op\t_stream_insertion_op.cpp(39) : error C2666: 'M2Stream::operator <<' : …Run Code Online (Sandbox Code Playgroud)