我有一个相对较大的系统(到目前为止约25000行)用于监控无线电相关设备.它使用最新版本的ZedGraph显示图表等.该程序使用Win7上的VS2010上的C#进行编码.问题是:
我希望程序能够快速运行!
解决方案中的每个项目都设置为RELEASE,Debug非托管代码为DISABLED,定义DEBUG和TRACE常量为DISABLED,优化代码 - 我尝试了,警告级别 - 我试过,抑制JIT - 我试过,或者我试过所有StackOverflow上已经提出的解决方案 - 没有成功.程序在分析器外部很慢,在分析器中很快.我不认为问题出在我的代码中,因为如果我将探查器附加到其他不相关的进程中它会变得很快!
请帮忙!我真的需要它在各地快速,因为它是一个关键业务应用程序和性能问题是不能容忍的...
更新1 - 8跟随
-------------------- UPDATE1:--------------------
问题似乎与ZedGraph无关,因为在我用自己的基本绘图替换ZedGraph之后它仍然存在.
-------------------- UPDATE2:--------------------
在虚拟机中运行该程序,该程序仍然运行缓慢,并且从主机运行的探查器不会使它快速.
-------------------- UPDATE3:--------------------
启动屏幕捕获到视频也可以加快程序的速度!
-------------------- UPDATE4:--------------------
如果我打开英特尔图形驱动程序设置窗口(这个东西:http://www.intel.com/support/graphics/sb/img/resolution_new.jpg),只是不断地将光标悬停在按钮上,这样它们就会发光,等等,我的节目加快了!如果我运行GPUz或Kombustor,它不会加速,因此没有GPU上的超频 - 它保持稳定850Mhz.
-------------------- Update5:--------------------
测试不同的机器:
- 在配备Intel HD2000的Core i5-2400S上,UI运行缓慢,CPU使用率约为15%.
- 在配备英特尔G41 Express的同事的Core 2 Duo上,UI运行速度很快,但CPU使用率约为90%(这也不正常)
- 在配备专用Radeon X1650的酷睿i5-2400S上,UI运行速度极快,CPU使用率约为50%.
-------------------- Update6:--------------------
一段代码,显示我如何更新单个图形(graphFFT
是ZedGraphControl
易于使用的封装):
public void LoopDataRefresh() //executes in a new thread
{
while (true)
{
while (!d.Connected)
Thread.Sleep(1000);
if (IsDisposed)
return; …
Run Code Online (Sandbox Code Playgroud) 我需要我的 WCF 服务来向客户端引发事件。我已经读到通过回调通道发生这种情况,并且我已经通过以下方式实现了它:服务接口:
public interface IServiceCallback
{
[OperationContract(IsOneWay = true)]
void OnNewAlert(Alert a);
[OperationContract(IsOneWay = true)]
void OnProductEdited(Product p);
[OperationContract(IsOneWay = true)]
void OnHighlightChanged(Dictionary<User, List<Product>> highlighted);
[OperationContract(IsOneWay = true)]
void OnCatalogUpdated();
event EventHandler NewAlert;
event EventHandler ProductEdited;
event EventHandler HighlightChanged;
event EventHandler CatalogUpdated;
}
[ServiceContract(CallbackContract = typeof(IServiceCallback))]
public interface IService : IDisposable
{
[OperationContract]
List<Product> GetProducts(Predicate<Product> match = null, int limit = 0, string username = null);
[OperationContract]
Product GetProduct(Predicate<Product> match, string username = null);
[OperationContract]
Product GetRandomProduct(Predicate<Product> match = …
Run Code Online (Sandbox Code Playgroud) internal interface I_Foo
{
void Bar();
}
public abstract class A_Foo : I_Foo
{
public A_Foo() { }
abstract void I_Foo.Bar();
}
public class Foo : A_Foo
{
public Foo() : base() { }
internal override void Bar()
{
}
}
Run Code Online (Sandbox Code Playgroud)
你好!我试图让一些方法对外部代码可见,而其他方法只对我的程序集可见.为此,我提出,实施A_Foo和I_Foo内部接口I_Foo作为合同到组件的其他部分,公共抽象A_Foo作为抽象为外部代码,并集中了一些构造函数的功能,和几个不同类别的Foo明确保留内部修饰符.
但是,在A_Foo类中,我得到了
'A_Foo.I_Foo.Bar()'必须声明一个正文,因为它没有标记为abstract,extern或partial
即使该方法明确标记为"抽象".如果我添加一个正文,我会得到"抽象不是一个有效的修饰符".
我需要显式声明这个方法,以便在公共类中内部,我需要它是抽象的,所以我可以在实际的实现Foo中覆盖它.
为什么编译器不允许我?还有另一种方法可以达到同样的目的吗?谢谢.
我在Win10机器上有一个大型数据库,mysqld.exe会执行许多磁盘I / O(100%),并且持续数小时以100MB / s的速度持续写入-主要是写入-多次重启后仍然存在。我怎样才能知道它到底在做什么,并阻止它?我知道数据库目前未被使用,我想弄清楚该I / O来自何处并停止它。我在互联网上找到的唯一解决方案是常规配置建议,我不需要,我现在需要关闭此设备!
show processlist不显示任何内容。
更新:问题是在表上进行大量后台回滚操作。解决方案是:
1) kill mysqld.exe
2) add innodb_force_recovery=3 to my.ini
3) start mysqld.exe
4) export the table (96GB table resulted in about 40GB .sql file)
5) drop the table
6) kill mysqld.exe
7) set innodb_force_recovery=0 to my.ini
8) reboot and import the table back
Run Code Online (Sandbox Code Playgroud)
目前还没有关于数据完整性的想法,但是看起来还不错。
感谢米尔尼。
可以通过将程序集版本指定为"1.0.*"来自动增加程序集版本,它会自动确定构建版本和修订版本号.但是,如果有人希望他们的文件版本与大会版本相同,出于一致性或其他原因,如何在不每次手动输入的情况下实现这一目标?"1.0.*"方法不适用于AssemblyFileVersion.
c# ×4
.net ×2
callback ×1
database ×1
disk ×1
increment ×1
inheritance ×1
mysql ×1
performance ×1
profiler ×1
server ×1
utilization ×1
version ×1
wcf ×1
zedgraph ×1