小编Gre*_*bon的帖子

Process.Start()启动的应用程序没有得到参数

使用C#,我试图使用Process.Start()将命令行参数传递给新进程:

string path = @"C:\Demo\Demo.exe";
string arguments = "one two three";
ProcessStartInfo startInfo = new ProcessStartInfo
   {
      FileName = path,
      Arguments = arguments
   };
var process = Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)

我的C应用程序Demo.exe只是回显命令行参数:

int main( int argc, char *argv[] )
{
   int count=0;

   // Display each command-line argument.
    printf( "\nCommand-line arguments:\n" );
    for( count = 0; count < argc; count++ )
        printf( "  argv[%d]   %s\n", count, argv[count] );

    while(1);
}
Run Code Online (Sandbox Code Playgroud)

如果我从cmd.exe启动我的应用程序,我得到合理的输出:

Command-line arguments:
 argv[0]   Demo.exe
 argv[1]   one
 argv[2]   two
 argv[3]   three
Run Code Online (Sandbox Code Playgroud)

当我使用C#应用程序时,我唯一得到的是argv [0]中的path参数:

Command-line …
Run Code Online (Sandbox Code Playgroud)

c# processstartinfo process.start

11
推荐指数
2
解决办法
4800
查看次数

System.Windows.Forms.TrackBar内存使用具有较大的最大值

我有一个包含System.Windows.Forms.TrackBar的控件.我将其最大值设置为~200,000,000.当我这样做时,控件需要800MB的内存.将最大值减少到2,000,000使用了更合理的内存量.

//trackBar.Maximum = 210554060;  // uses ~800MB of memory
trackBar.Maximum = 1000000;      // uses a small amount of memory
Run Code Online (Sandbox Code Playgroud)

这是Windows控件中的错误吗?或者我是否要求轨道栏做一些不合理的事情?

更新: 我创建了一个新的Windows窗体项目,除了窗体上的轨迹栏之外什么都没有.我将最大值设置为200,000,000.我设置TickFrequency并进行更改,以便没有数百万的滴答和更改步骤.

当我这样做时,该应用程序使用超过800MB的内存.我正在使用.NET Framework 4.

trackbar max设置为200,000,000,使用> 800MB内存.

更新 我发现了这个问题的一些解释:http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.windowsforms.controls/2006-12/msg00015.html

添加测试项目的链接 https://www.dropbox.com/s/nh6jsymw05feoqn/testingTrackbar.zip?m

.net c# memory max trackbar

3
推荐指数
1
解决办法
1027
查看次数

bool TryGetX(out X x) 模式的替代方案

我经常使用该模式

bool TryGetX(out X x)
Run Code Online (Sandbox Code Playgroud)

当我需要从可能失败的服务获取数据时。当客户端和服务在尝试检索数据之前都不知道数据是否可用时,我会使用此方法。我从来没有完全满意以这种方式使用out参数,而且我从其他 SO 问题中看到它被认为是一个糟糕的模式。

然而,我还没有看到一个令人信服的替代 API 可以向客户端提示他们的方法调用实际上可能不会返回数据。

我考虑过的替代方案:

  • X GetX(),如果服务无法提供请求的数据,则GetX()返回null 。我不喜欢这样做,因为很多人不清楚他们是否需要检查是否返回null 。考虑到我在处理过的遗留代码中遇到的空引用异常的数量,人们经常忽略空检查,并且用户会看到一个丑陋的异常框。至少TryGetX方法让客户端清楚数据可能不会返回。即使他们确实检查 null,是否到处都要求if (x == null)真的比TryGetX(out X x)更好?

  • Try/Catch,如果无法返回数据,GetX()会抛出异常。同样,客户可能没有意识到GetX()会引发异常,即使他们意识到了,你也可以在代码中散布 Try/Catches。

  • GetXResult GetX(),其中GetXResult类有两个属性:bool SuccessX x。这可能是我的首选选择,但随后我有很多结果类,使我的项目变得混乱。

对于返回数据但可能无法返回请求的数据的方法,最好的方法是什么?

c# trygetvalue

2
推荐指数
1
解决办法
253
查看次数