在Google Sites
网站上工作,它从电子表格中获取数据并动态构建多个图表,我提到Google Apps脚本运行速度很慢.我通过使用缓存服务来分析代码并对其进行优化.优化后,图表代码大约需要.3秒(2759毫秒是我见过的最快的时间之一)绘制了11行有127行的图表.这次是将所有数据放入缓存的情况.从电子表格中获取数据并将其放入缓存的第一个执行时间大约为10秒.配置代码在简单的地方需要足够的时间(几十毫秒).为了测量GAS性能,我编写了一个非常简单的过程,并在GAS环境中执行,如部署的Web应用程序和Caja Playground.我还向GAS问题跟踪器提交了一个问题.
Eric Koleda合理地提到,将服务器代码与客户端上运行的代码进行比较是不正确的.我重写了基准代码,结果如下.详细说明如下.
Engine |List To Map|Adjust|Quick Sort|Sort|Complete| GAS | 138| 196| 155| 38| 570| rhino-1.6.5 | 67| 44| 31| 9| 346| spidermonkey-1.7| 40| 36| 11| 5| 104|
GAS
- 在GAS引擎上运行包含不同函数执行时间的行.所有时间都以毫秒为单位.GAS执行时间在很大范围内漂移.在表中是我在5-10次执行中遇到的最快的时间.Complete
我见过的最糟糕的时间是1194毫秒.源代码在这里.结果在这里.rhino-1.6.5
和spidermonkey-1.7
- 行包含与GAS
使用ideone.com在相应的Javascript引擎上执行相同功能的执行时间.这些引擎的代码和时间在这里和这里.基准代码包含一些功能.
List To Map [listToMap]
- 将对象列表转换为具有复合键的映射的函数.它来自站点脚本,需要大约.图表代码的9.2%(256/2559毫秒).Adjust [adjustData_]
- 一个函数,它将矩阵中的所有日期列转换为预定义格式的文本,转置它并将[[[a], [1]], [[b], [2]]]
表格中的行转换为 …文章“模板参数和模板参数”的“模板非类型参数”段落指出:
唯一的例外是类类型的非类型模板参数及其子对象(C++20 起)中引用或指针类型的非类型模板参数和引用或指针类型的非静态数据成员不能引用/是地址
- 一个临时对象(包括在引用初始化期间创建的对象);
- 字符串文字;
- 的结果
typeid
;- 预定义变量
__func__
;- 或上述 (C++20 起)之一的子对象(包括非静态类成员、基子对象或数组元素)。
重点是我的。
下面是一个例子
template<int* p> class X {};
int a[10];
struct S
{
int m;
static int s;
} s;
X<&a[2]> x3; // error: address of array element
X<&s.m> x4; // error: address of non-static member
X<&s.s> x5; // ok: address of static member
X<&S::s> x6; // ok: address of static member
Run Code Online (Sandbox Code Playgroud)
根据引用的语句,error
注释中带有单词的行应该可以被支持 c++20 的 c++ …
在我的计算机上,在Windows 7上运行,以下代码在Visual C++ 2010中使用Boost 1.53编译,输出
no timeout
elapsed time (ms): 1000
Run Code Online (Sandbox Code Playgroud)
使用GCC 4.8 (在线链接)输出编译的相同代码
timeout
elapsed time (ms): 1000
Run Code Online (Sandbox Code Playgroud)
我的观点是VC++输出不正确,应该是timeout
.有没有人no timeout
在VC++中有相同的输出(即)?如果是,那么它是Win32实现中的一个错误boost::condition_variable
吗?
代码是
#include <boost/thread.hpp>
#include <iostream>
int main(void) {
boost::condition_variable cv;
boost::mutex mx;
boost::unique_lock<decltype(mx)> lck(mx);
boost::chrono::system_clock::time_point start = boost::chrono::system_clock::now();
const auto cv_res = cv.wait_for(lck, boost::chrono::milliseconds(1000));
boost::chrono::system_clock::time_point end = boost::chrono::system_clock::now();
const auto count = (boost::chrono::duration_cast<boost::chrono::milliseconds>(end - start)).count();
const std::string str = (cv_res == boost::cv_status::no_timeout) ? "no timeout" : "timeout";
std::cout << str << std::endl; …
Run Code Online (Sandbox Code Playgroud)