我写了一个小脚本用于工作,当开发它时一切都很好但是当我把它翻过来用于生产时,人们抱怨显示第一个表单所花费的时间.展望它,似乎总是花在导入脚本使用的各种模块上.我创建了一个只包含import语句和打印Hello World的新脚本,然后将它作为python脚本和可执行文件运行,结果如下.发生了什么事,有什么方法可以加快速度吗?
Python文件:
$ for i in {1..10}
> do
> time ./ipy.exe time.py
> done
real 0m1.712s
real 0m1.701s
real 0m1.689s
real 0m1.691s
real 0m1.709s
real 0m1.663s
real 0m1.697s
real 0m1.700s
real 0m1.699s
real 0m1.741s
Run Code Online (Sandbox Code Playgroud)
使用ipy pyc.py /main:time.py/target:exe构建的exe
$ for i in {1..10}
> do
> time ./time.exe | grep -v user | grep -v sys
> done
real 0m22.119s
real 0m22.116s
real 0m22.133s
real 0m21.816s
real 0m21.985s
real 0m21.785s
real 0m22.010s
real 0m21.686s
real 0m21.877s
real 0m21.944s
Run Code Online (Sandbox Code Playgroud)
time.py的内容: …
我想基于宏有条件地编译代码.基本上我有一个看起来像的宏(从真实版本简化):
#if DEBUG
#define START_BLOCK( x ) if(DebugVar(#x) \
{ char debugBuf[8192];
#define END_BLOCK( ) printf("%s\n", debugBuf); }
#else
#define START_BLOCK( x ) (void)0;
#define END_BLOCK( ) (void)0;
#endif
Run Code Online (Sandbox Code Playgroud)
问题是,如果DEBUG定义了,你可以做以下事情:
START_BLOCK( test )
char str[] = "Test is defined";
strcpy(debugBuf, str);
END_BLOCK( )
START_BLOCK( foo )
char str[] = "Foo is defined";
strcpy(debugBuf, str);
END_BLOCK( )
Run Code Online (Sandbox Code Playgroud)
一切正常,因为每个块都在它自己的范围内.但是,如果未定义DEBUG,那么您将str在第二个块中重新定义.(嗯,你也debugBuf没有定义,但这只是简化例子的副作用.)
我想做的是让#else成为:
#else
#define START_BLOCK( x ) #if 0
#define END_BLOCK( ) #endif
#endif
Run Code Online (Sandbox Code Playgroud)
或者编译一些在开始/结束块之间没有任何东西的方法.我尝试了以上内容,我也尝试过以下方面:
#else
#define NULLMACRO( …Run Code Online (Sandbox Code Playgroud) 查看PyDev的文档及其在Pydev站点的测试集成,屏幕截图显示了每个测试的输出以及测试运行所需的时间.但是当我运行它时,输出中只显示失败的测试,即使这样,它所用的时间也是空的.我试图在pyunit testrunner配置中增加详细程度,但这只是给系统输出窗口提供了更多输出,而不是PyUnit窗口.有人知道怎么修这个东西吗?(这是4/4 PyDev 2.0版本)
我有一些代码可以在VS2008中工作,但不能在G ++中工作:
struct IIterationFunctor
{
virtual bool operator()( SStateInfo& rStateInfo ) = 0;
virtual ~IIterationFunctor() { }
};
struct SNumItemsFunctor : public IIterationFunctor
{
SNumItemsFunctor (uint8& nNumItems, uint8 nItemType )
: m_nNumItems (nNumItems)
, m_nItemType (nItemType)
{
m_nNumItems = 0;
}
virtual bool operator() ( SStateInfo& rStateInfo )
{
if( rStateInfo.sState.nItemType == m_nItemType )
{
++m_nNumItems;
}
return true;
}
uint8& m_nNumItems;
uint8 m_nItemType
};
void IterateStateInfo( IIterationFunctor& functor )
{
for (TStateInfoIterator itStateInfo = m_lstStateInfos.Begin();
itStateInfo != m_lstStateInfos.End();
itStateInfo++) …Run Code Online (Sandbox Code Playgroud)