首页 \ 问答 \ 什么是继续运行方法的最佳方法(what is the best way to keep running a method)

什么是继续运行方法的最佳方法(what is the best way to keep running a method)

我必须继续运行24x7的方法。基本上,应用程序应该通过使用一些线程每秒处理40个数据。 我可以使用while或递归调用相同的方法。 但在这两个过程中,cpu使用率过高几乎95-100%。 我不能使用计时器,因为那时处理线程不能正常工作。 根据提供的解决方案,许多人谈论使用线程睡眠时使用while。 但是如果我使用线程休眠,那么它会在每次迭代中得到延迟。 我正在使用c#4.0。

我的问题:有没有更好的解决方案来减少CPU使用?

主要方法:

static void Main(string[] args)
     {
    while(true)
    {
      processData();
      Thread.sleep(1000);
    // here i use a 1 second sleep just for give a breath of CPU.
    //But this one second sleep make me delay for enter data processing.
    // I am looking for a better solution that no sleep time will use and CPU usages will getting low.
    }
     }

//Method should run always

static string processData()
{
  {
// Open and close threads  to process the data in every second.
  }

 // processData(); // it can be used for recursive method calling
}

i have to keep running a method for 24x7.Basically the application should process 40 data in every second, by using some thread. i can use while or recursive call ling the same method. but in both process the cpu uses getting too high almost 95-100 %. i can't use timer because then the processing threads are not working properly. as per the provided solution many people talk to use the while with thread sleep. but if i use thread sleep then it getting delay in every iteration. i am using c# 4.0.

my question: is there any better solution to reduce the cpu uses?

the main method:

static void Main(string[] args)
     {
    while(true)
    {
      processData();
      Thread.sleep(1000);
    // here i use a 1 second sleep just for give a breath of CPU.
    //But this one second sleep make me delay for enter data processing.
    // I am looking for a better solution that no sleep time will use and CPU usages will getting low.
    }
     }

//Method should run always

static string processData()
{
  {
// Open and close threads  to process the data in every second.
  }

 // processData(); // it can be used for recursive method calling
}

原文:https://stackoverflow.com/questions/19256946
更新时间:2021-01-09 21:01

最满意答案

您可以使用以下过程来执行您想要的操作。 它只需要你:

  1. 在调用proc之前创建Temp Table(您将Temp Table名称传递给proc)。 这允许临时表在当前作用域中使用,因为一旦proc结束/返回,就会删除在存储过程中创建的临时表。
  2. 在Temp Table中只放一个字段; 数据类型是无关紧要的,因为该字段将被删除(您将字段名称传递给proc)

[ 确保将proc名称更改为您喜欢的任何名称,但在后面的示例中使用了temp proc名称 ]

CREATE PROCEDURE #Abracadabra
(
    @TempTableName SYSNAME,
    @DummyFieldName SYSNAME,
    @TestMode BIT = 0
)
AS
SET NOCOUNT ON

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL + N', [',
                       N'ALTER TABLE ' + @TempTableName + N' ADD [')
               + [Title]
               + N'] VARCHAR(100)'
FROM #FieldList
ORDER BY [ID]

SET @SQL = @SQL
            + N' ; ALTER TABLE '
            + @TempTableName
            + N' DROP COLUMN ['
            + @DummyFieldName
            + N'] ; '

IF (@TestMode = 0)
BEGIN
    EXEC(@SQL)
END
ELSE
BEGIN
    PRINT @SQL
END
GO

以下示例显示了正在使用的proc。 第一次执行是在测试模式下,它只打印将要执行的SQL。 第二次执行运行SQL和SELECT,然后EXEC显示字段是FieldList表中的字段。

/*
-- HIGHLIGHT FROM "SET" THROUGH FINAL "INSERT" AND RUN ONCE
-- to setup the example

SET NOCOUNT ON;

--DROP TABLE #FieldList
CREATE TABLE #FieldList (ID INT, Title VARCHAR(50))

INSERT INTO #FieldList (ID, Title) VALUES (1, 'City')
INSERT INTO #FieldList (ID, Title) VALUES (2, 'UserSuppliedFieldName')
INSERT INTO #FieldList (ID, Title) VALUES (3, 'SomeField')
*/


IF (OBJECT_ID('tempdb.dbo.#Tmp') IS NOT NULL)
BEGIN
    DROP TABLE #Tmp
END
CREATE TABLE #Tmp (Dummy INT)

EXEC #Abracadabra
           @TempTableName = N'#Tmp',
           @DummyFieldName = N'Dummy',
           @TestMode = 1
-- look in "Messages" tab

EXEC #Abracadabra
           @TempTableName = N'#Tmp',
           @DummyFieldName = N'Dummy',
           @TestMode = 0

SELECT * FROM #Tmp

@TestMode = 1输出:

ALTER TABLE #Tmp ADD [City] VARCHAR(100),[UserSuppliedFieldName] VARCHAR(100),[SomeField] VARCHAR(100); ALTER TABLE #Tmp DROP COLUMN [Dummy];


You can use the following proc to do what you are wanting. It just requires that you:

  1. Create the Temp Table before calling the proc (you will pass in the Temp Table name to the proc). This allows the temp table to be used in the current scope as Temp Tables created in Stored Procedures are dropped once that proc ends / returns.
  2. Put just one field in the Temp Table; the datatype is irrelevant as the field will be dropped (you will pass in the field name to the proc)

[Be sure to change the proc name to whatever you like, but the temp proc name is used in the example that follows]

CREATE PROCEDURE #Abracadabra
(
    @TempTableName SYSNAME,
    @DummyFieldName SYSNAME,
    @TestMode BIT = 0
)
AS
SET NOCOUNT ON

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = COALESCE(@SQL + N', [',
                       N'ALTER TABLE ' + @TempTableName + N' ADD [')
               + [Title]
               + N'] VARCHAR(100)'
FROM #FieldList
ORDER BY [ID]

SET @SQL = @SQL
            + N' ; ALTER TABLE '
            + @TempTableName
            + N' DROP COLUMN ['
            + @DummyFieldName
            + N'] ; '

IF (@TestMode = 0)
BEGIN
    EXEC(@SQL)
END
ELSE
BEGIN
    PRINT @SQL
END
GO

The following example shows the proc in use. The first execution is in Test Mode that simply prints the SQL that will be executed. The second execution runs the SQL and the SELECT following that EXEC shows that the fields are what was in the FieldList table.

/*
-- HIGHLIGHT FROM "SET" THROUGH FINAL "INSERT" AND RUN ONCE
-- to setup the example

SET NOCOUNT ON;

--DROP TABLE #FieldList
CREATE TABLE #FieldList (ID INT, Title VARCHAR(50))

INSERT INTO #FieldList (ID, Title) VALUES (1, 'City')
INSERT INTO #FieldList (ID, Title) VALUES (2, 'UserSuppliedFieldName')
INSERT INTO #FieldList (ID, Title) VALUES (3, 'SomeField')
*/


IF (OBJECT_ID('tempdb.dbo.#Tmp') IS NOT NULL)
BEGIN
    DROP TABLE #Tmp
END
CREATE TABLE #Tmp (Dummy INT)

EXEC #Abracadabra
           @TempTableName = N'#Tmp',
           @DummyFieldName = N'Dummy',
           @TestMode = 1
-- look in "Messages" tab

EXEC #Abracadabra
           @TempTableName = N'#Tmp',
           @DummyFieldName = N'Dummy',
           @TestMode = 0

SELECT * FROM #Tmp

Output from @TestMode = 1:

ALTER TABLE #Tmp ADD [City] VARCHAR(100), [UserSuppliedFieldName] VARCHAR(100), [SomeField] VARCHAR(100) ; ALTER TABLE #Tmp DROP COLUMN [Dummy] ;

相关问答

更多

相关文章

更多

最新问答

更多
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)
  • 是否可以嵌套hazelcast IMaps?(Is it possible to nest hazelcast IMaps? And whick side effects can I expect? Is it a good Idea anyway?)
  • UIViewAnimationOptionRepeat在两个动画之间暂停(UIViewAnimationOptionRepeat pausing in between two animations)
  • 在x-kendo-template中使用Razor查询(Using Razor query within x-kendo-template)
  • 在BeautifulSoup中替换文本而不转义(Replace text without escaping in BeautifulSoup)
  • 如何在存根或模拟不存在的方法时配置Rspec以引发错误?(How can I configure Rspec to raise error when stubbing or mocking non-existing methods?)
  • asp用javascript(asp with javascript)
  • “%()s”在sql查询中的含义是什么?(What does “%()s” means in sql query?)
  • 如何为其编辑的内容提供自定义UITableViewCell上下文?(How to give a custom UITableViewCell context of what it is editing?)
  • c ++十进制到二进制,然后使用操作,然后回到十进制(c++ Decimal to binary, then use operation, then back to decimal)
  • 以编程方式创建视频?(Create videos programmatically?)
  • 无法在BeautifulSoup中正确解析数据(Unable to parse data correctly in BeautifulSoup)
  • webform和mvc的区别 知乎
  • 如何使用wadl2java生成REST服务模板,其中POST / PUT方法具有参数?(How do you generate REST service template with wadl2java where POST/PUT methods have parameters?)
  • 我无法理解我的travis构建有什么问题(I am having trouble understanding what is wrong with my travis build)
  • iOS9 Scope Bar出现在Search Bar后面或旁边(iOS9 Scope Bar appears either behind or beside Search Bar)
  • 为什么开机慢上面还显示;Inetrnet,Explorer
  • 有关调用远程WCF服务的超时问题(Timeout Question about Invoking a Remote WCF Service)