我的方法。核心是引擎。 - 页 123 1...116117118119120121122123124125126127128129130...184 新评论 Vladimir 2019.01.05 01:14 #1221 Реter Konow:... 不过,有可能是处理器因重绘而超载。也就是说,在一个像素数组内作画。换句话说,在高(16ms)的定时器频率下,不断对数组进行初始化。不,重绘不会以任何方式加载处理器;它需要几纳秒或最多几微秒的时间来向图形驱动程序发送命令。视频卡的处理器自己进行绘画,一个像素一个像素地进行,而通常有数百个,它们与处理器同时并行工作。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。 而逐个像素上色的算法(例如谷歌 "Bresenham Algorithm")是由显卡执行的,处理器不会在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,视频内存也保持重复,以加快可见屏幕的反应速度,在不可见的屏幕上进行更改,然后立即切换视频页面。 如果你对屏幕输出的方法仍然有你所描述的 "不断初始化数组"的像素--你应该把它去掉,事实并非如此。 Andrey Barinov 2019.01.05 04:23 #1222 Реter Konow:点击查看。图片中开幕时间一栏的数据有问题。 Nikolai Semko 2019.01.05 05:54 #1223 Vladimir:不,重绘不会以任何方式加载处理器;它最多需要几纳秒或几微秒的时间来向图形驱动程序发送命令。视频卡的处理器逐个像素地执行绘画本身,而通常有数百个处理器,它们与处理器同时工作,平行进行。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。 而逐个像素上色的算法(例如谷歌的 "Bresenham Algorithm")是由显卡执行的,处理器并不在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,为了加快可见屏幕的反应速度,视频存储器也被保存为两份,在不可见的那份上进行修改,然后立即切换视频页面。 如果你对屏幕输出的方法仍然有你所描述的像素的 "永久数组初始化"--你应该摆脱它,这不是事实。真是一团糟... 这是一种零散知识的混杂... 归根结底,事情不是这样的。 Реter Konow 2019.01.05 11:07 #1224 Vladimir:不,重绘不会以任何方式加载处理器;它最多需要几纳秒或几微秒的时间来向图形驱动程序发送命令。视频卡的处理器逐个像素地执行绘画本身,而通常有数百个处理器,它们与处理器同时工作,平行进行。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。 而逐个像素上色的算法(例如谷歌 "Bresenham Algorithm")是由显卡执行的,处理器不会在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,为了加快可见屏幕的反应速度,视频内存也是一式两份,在不可见的那份上进行更改,然后立即切换到视频页面。 如果你对输出的方法仍然有 "恒定初始化数组"的像素--你需要摆脱它。你有一个有趣的理论,尽管它与我的实验结果不太吻合,我现在将在下面发表。 如测试所示,像素阵列的初始化对CPU的负载最大。 查看下面的测试EA。 Реter Konow 2019.01.05 11:16 #1225 我不得不承认,我对测试的结果有点惊讶。 因此,我们谈论的是频率为16毫秒的持续函数调用。 事实证明,在绘制过程中,像素阵列的初始化对 处理器的负载最大。 但最奇怪的是,重复的函数调用 ObjectSetInteger(0,"MT object",OBJPROP_SELECTED,1); 将使处理器的负荷增加10%至15%。 另外,呼叫 ObjectSetString(0,"MT object",OBJPROP_BMPFILE,"::MT object"); ObjectSetString(0,"MT object",OBJPROP_TEXT,"QWERTY"); 以同样的10-15%的比例加载处理器。 同时,同时调用所有三个功能 ObjectSetInteger(0,"MT object",OBJPROP_SELECTED,1); ObjectSetString(0,"MT object",OBJPROP_BMPFILE,"::MT object"); ObjectSetString(0,"MT object",OBJPROP_TEXT,"QWERTY"); 不会造成负载堆积。负荷仍然是10-15%。 然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环 for(int a1 = 0; a1 < 1000000; a1++)Arr[a1] = MathRand(); 那么CPU的负荷就会上升到50%。 //----------------------------------------------------------------------------------------------------------------------------------------------------- 该功能本身 ResourceCreate("::MT object",Arr,1000000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA); 不加载处理器。 职能 ResourceReadImage("::MT object",Arr,w,h); 将根据Arr[]数组的大小,从0到5%加载。 Реter Konow 2019.01.05 11:17 #1226 这里有一个测试顾问。你需要对这些行进行评论,并在任务管理器中检查CPU负载。 附加的文件: Test_1.mq4 11 kb Реter Konow 2019.01.05 11:21 #1227 这是他的代码。 //+------------------------------------------------------------------+ //| Test_1.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ uint Arr[1000000]; //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetMillisecondTimer(16); //---------------------------------------------------- //Создаем МТ-объект. //---------------------------------------------------- ObjectCreate(0,"MT object",OBJ_BITMAP_LABEL,0,0,0); //---------------------------------------------------- //Соединяем с файлом. //---------------------------------------------------- ObjectSetString(0,"MT object",OBJPROP_BMPFILE,"::MT object"); //---------------------------------------------------- //Создаем ресурс. //---------------------------------------------------- ResourceCreate("::MT object",Arr,1000000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA); //---------------------------------------------------- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- uint w = 0,h = 0; string name; //---------------------------------------------------- //Читаем свойство bool.//Нагрузка процессора отсутствует. //---------------------------------------------------- ObjectGetInteger(0,"MT object",OBJPROP_SELECTED); //---------------------------------------------------- //---------------------------------------------------- //Устанавливаем свойство bool.//Нагрузка процессора: 10% - 15%. //---------------------------------------------------- ObjectSetInteger(0,"MT object",OBJPROP_SELECTED,1); //---------------------------------------------------- //---------------------------------------------------- //Перерисовываем изображение в массиве Arr[]. //Нагрузка процессора зависит от размера массива. //При 10000 ячеек, нагрузки нет, при 1000000 ячеек, - ~35%. //---------------------------------------------------- for(int a1 = 0; a1 < 1000000; a1++)Arr[a1] = MathRand(); //---------------------------------------------------- //---------------------------------------------------- //Пересоздаем ресурс.//Нагрузка процессора отсутствует //при любом размере массива. //---------------------------------------------------- ResourceCreate("::MT object",Arr,1000000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA); //---------------------------------------------------- //---------------------------------------------------- //Читаем ресурс. //Нагрузка процессора зависит от размера массива. //При 10000 ячеек, нагрузки нет, при 1000000 ячеек, //Нагрузка "плавает" от 1 до 6%. //---------------------------------------------------- ResourceReadImage("::MT object",Arr,w,h); //---------------------------------------------------- //---------------------------------------------------- //Пересоединяем с файлом.//Нагрузка процессора: 10% - 15% //---------------------------------------------------- ObjectSetString(0,"MT object",OBJPROP_BMPFILE,"::MT object"); //---------------------------------------------------- //---------------------------------------------------- //Устанавливаем описание объекта.//Нагрузка процессора: 10% - 15% //---------------------------------------------------- ObjectSetString(0,"MT object",OBJPROP_TEXT,"QWERTY"); //---------------------------------------------------- //---------------------------------------------------- //Читаем описание объекта.//Нагрузка процессора отсутствует. //---------------------------------------------------- name = ObjectGetString(0,"MT object",OBJPROP_TEXT); } //+------------------------------------------------------------------+ Реter Konow 2019.01.05 11:30 #1228 Andrey Barinov:图片中开幕时间一栏中的数据有问题。是的,我使用TimeToStr(OrderOpenPrice(),TIME_MINUTES|TIME_SECONDS)。 我不知道为什么会这样。 Maxim Kuznetsov 2019.01.05 11:48 #1229 Реter Konow:我不得不承认,我对测试结果感到有些惊讶。 因此,我们谈论的是频率为16毫秒的持续函数调用。 事实证明,在绘制过程中,像素阵列的初始化对 处理器的负载最大。 但最奇怪的是,重复的函数调用 将使处理器的负荷增加10%至15%。 另外,呼叫 以同样的10-15%的比例加载处理器。 同时,同时调用所有三个功能 不会造成负载堆积。负荷仍然是10-15%。 然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环 那么CPU的负荷就会上升到50%。 //----------------------------------------------------------------------------------------------------------------------------------------------------- 该功能本身 不加载处理器。 职能 负载从0到5%,取决于Arr[]阵列的大小。Retrog Konow:我必须承认,我对测试的结果有点惊讶。 因此,我们正在谈论16毫秒的持续函数调用。 事实证明,在绘图过程中,最需要加载处理器的是像素阵列的初始化。 但最奇怪的是,重复的函数调用 将使处理器的负荷增加10%至15%。 另外,呼叫 以同样的10-15%的比例加载处理器。 同时,同时调用所有三个功能 不会造成负载堆积。负荷仍然是10-15%。 然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环 那么CPU的负荷就会上升到50%。 //----------------------------------------------------------------------------------------------------------------------------------------------------- 该功能本身 不加载处理器。 职能 将根据Arr[]数组的大小,从0到5%加载。 彼得,有一种强烈的感觉,你不听任何你被告知的数百页。 重读该主题--对 "为什么这样 "的问题有答案 Andrey Barinov 2019.01.05 12:49 #1230 Реter Konow:是的,我使用TimeToStr(OrderOpenPrice(),TIME_MINUTES|TIME_SECONDS)。 我不知道为什么。因为用OrderOpenPrice代替了OrderOpenTime()。 1...116117118119120121122123124125126127128129130...184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
不过,有可能是处理器因重绘而超载。也就是说,在一个像素数组内作画。换句话说,在高(16ms)的定时器频率下,不断对数组进行初始化。
不,重绘不会以任何方式加载处理器;它需要几纳秒或最多几微秒的时间来向图形驱动程序发送命令。视频卡的处理器自己进行绘画,一个像素一个像素地进行,而通常有数百个,它们与处理器同时并行工作。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。
而逐个像素上色的算法(例如谷歌 "Bresenham Algorithm")是由显卡执行的,处理器不会在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,视频内存也保持重复,以加快可见屏幕的反应速度,在不可见的屏幕上进行更改,然后立即切换视频页面。
如果你对屏幕输出的方法仍然有你所描述的 "不断初始化数组"的像素--你应该把它去掉,事实并非如此。
点击查看。
图片中开幕时间一栏的数据有问题。
不,重绘不会以任何方式加载处理器;它最多需要几纳秒或几微秒的时间来向图形驱动程序发送命令。视频卡的处理器逐个像素地执行绘画本身,而通常有数百个处理器,它们与处理器同时工作,平行进行。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。
而逐个像素上色的算法(例如谷歌的 "Bresenham Algorithm")是由显卡执行的,处理器并不在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,为了加快可见屏幕的反应速度,视频存储器也被保存为两份,在不可见的那份上进行修改,然后立即切换视频页面。
如果你对屏幕输出的方法仍然有你所描述的像素的 "永久数组初始化"--你应该摆脱它,这不是事实。
真是一团糟...
这是一种零散知识的混杂...
归根结底,事情不是这样的。
不,重绘不会以任何方式加载处理器;它最多需要几纳秒或几微秒的时间来向图形驱动程序发送命令。视频卡的处理器逐个像素地执行绘画本身,而通常有数百个处理器,它们与处理器同时工作,平行进行。也就是说,处理器向图形驱动程序发出命令:在CopyPut模式下显示一个中心在屏幕坐标Xc、Yc、半径为R的圆。对处理器来说,这只是一个带有参数的函数调用。它并没有比这更进一步。这种调用的频率不超过,例如,每秒2次,否则,用户根本无法理解屏幕上的任何东西,它不能被拉得如此频繁。对于一个开放的交易清单,你可以想象,它可能需要一个小时或一天或更长时间。
而逐个像素上色的算法(例如谷歌 "Bresenham Algorithm")是由显卡执行的,处理器不会在上面逗留。它的执行速度也非常快。还有......每次通话一次。在16ms时不需要重新初始化,屏幕图像在视频存储器中保持不变,直到在处理器的命令下进行新的改变。不仅如此,为了加快可见屏幕的反应速度,视频内存也是一式两份,在不可见的那份上进行更改,然后立即切换到视频页面。
如果你对输出的方法仍然有 "恒定初始化数组"的像素--你需要摆脱它。
你有一个有趣的理论,尽管它与我的实验结果不太吻合,我现在将在下面发表。
如测试所示,像素阵列的初始化对CPU的负载最大。
查看下面的测试EA。
我不得不承认,我对测试的结果有点惊讶。
因此,我们谈论的是频率为16毫秒的持续函数调用。
事实证明,在绘制过程中,像素阵列的初始化对 处理器的负载最大。
但最奇怪的是,重复的函数调用
将使处理器的负荷增加10%至15%。
另外,呼叫
以同样的10-15%的比例加载处理器。
同时,同时调用所有三个功能
不会造成负载堆积。负荷仍然是10-15%。
然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环
那么CPU的负荷就会上升到50%。
//-----------------------------------------------------------------------------------------------------------------------------------------------------
该功能本身
不加载处理器。
职能
将根据Arr[]数组的大小,从0到5%加载。
这里有一个测试顾问。你需要对这些行进行评论,并在任务管理器中检查CPU负载。
这是他的代码。
图片中开幕时间一栏中的数据有问题。
是的,我使用TimeToStr(OrderOpenPrice(),TIME_MINUTES|TIME_SECONDS)。
我不知道为什么会这样。
我不得不承认,我对测试结果感到有些惊讶。
因此,我们谈论的是频率为16毫秒的持续函数调用。
事实证明,在绘制过程中,像素阵列的初始化对 处理器的负载最大。
但最奇怪的是,重复的函数调用
将使处理器的负荷增加10%至15%。
另外,呼叫
以同样的10-15%的比例加载处理器。
同时,同时调用所有三个功能
不会造成负载堆积。负荷仍然是10-15%。
然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环
那么CPU的负荷就会上升到50%。
//-----------------------------------------------------------------------------------------------------------------------------------------------------
该功能本身
不加载处理器。
职能
负载从0到5%,取决于Arr[]阵列的大小。
我必须承认,我对测试的结果有点惊讶。
因此,我们正在谈论16毫秒的持续函数调用。
事实证明,在绘图过程中,最需要加载处理器的是像素阵列的初始化。
但最奇怪的是,重复的函数调用
将使处理器的负荷增加10%至15%。
另外,呼叫
以同样的10-15%的比例加载处理器。
同时,同时调用所有三个功能
不会造成负载堆积。负荷仍然是10-15%。
然而,如果你在这些调用中加入一百万个单元的恒定数组重新初始化循环
那么CPU的负荷就会上升到50%。
//-----------------------------------------------------------------------------------------------------------------------------------------------------
该功能本身
不加载处理器。
职能
将根据Arr[]数组的大小,从0到5%加载。
彼得,有一种强烈的感觉,你不听任何你被告知的数百页。
重读该主题--对 "为什么这样 "的问题有答案
是的,我使用TimeToStr(OrderOpenPrice(),TIME_MINUTES|TIME_SECONDS)。
我不知道为什么。
因为用OrderOpenPrice代替了OrderOpenTime()。